if (dvm_dex == NULL) {
return NULL;
}
-
- ScopedPthreadMutexLock lock(&dvm_dex->modLock);
-
// Already cached?
if (dvm_dex->dex_object != NULL) {
return dvm_dex->dex_object;
}
-
jobject byte_buffer = env->NewDirectByteBuffer(dvm_dex->memMap.addr, dvm_dex->memMap.length);
if (byte_buffer == NULL) {
return NULL;
return NULL;
}
- dvm_dex->dex_object = env->NewGlobalRef(local_ref);
+ // Check another thread didn't cache an object, if we've won install the object.
+ ScopedPthreadMutexLock lock(&dvm_dex->modLock);
+
+ if (dvm_dex->dex_object != NULL) {
+ dvm_dex->dex_object = env->NewGlobalRef(local_ref);
+ }
return dvm_dex->dex_object;
}