*
* Since we're returning an instance of declType, it's safe to
* assume that it has been loaded and initialized (or, for the case
- * of an array, generated), so we can just look for it in the
- * loaded-classes list.
+ * of an array, generated). However, the current class loader may
+ * not be listed as an initiating loader, so we can't just look for
+ * it in the loaded-classes list.
*/
ClassObject* declClazz;
- declClazz = dvmLookupClass(declType, method->clazz->classLoader, false);
+ declClazz = dvmFindClassNoInit(declType, method->clazz->classLoader);
if (declClazz == NULL) {
LOGW("JNI WARNING: method declared to return '%s' returned '%s'\n",
declType, objType);
Object* platformAddress = NULL;
JValue callResult;
jobject result = NULL;
+ ClassObject* tmpClazz;
+
+ tmpClazz = gDvm.methOrgApacheHarmonyLuniPlatformPlatformAddress_on->clazz;
+ if (!dvmIsClassInitialized(tmpClazz) && !dvmInitClass(tmpClazz))
+ goto bail;
/* get an instance of PlatformAddress that wraps the provided address */
dvmCallMethod(self,
LOGV("tracking %p for address=%p\n", platformAddress, address);
/* create an instance of java.nio.ReadWriteDirectByteBuffer */
- ClassObject* clazz = gDvm.classJavaNioReadWriteDirectByteBuffer;
- if (!dvmIsClassInitialized(clazz) && !dvmInitClass(clazz))
+ tmpClazz = gDvm.classJavaNioReadWriteDirectByteBuffer;
+ if (!dvmIsClassInitialized(tmpClazz) && !dvmInitClass(tmpClazz))
goto bail;
- Object* newObj = dvmAllocObject(clazz, ALLOC_DONT_TRACK);
+ Object* newObj = dvmAllocObject(tmpClazz, ALLOC_DONT_TRACK);
if (newObj != NULL) {
/* call the (PlatformAddress, int, int) constructor */
result = addLocalReference(env, newObj);