Jit: Fix deadlock in method tracing.
diff --git a/vm/compiler/Compiler.c b/vm/compiler/Compiler.c
index adcc16e..c16e78c 100644
--- a/vm/compiler/Compiler.c
+++ b/vm/compiler/Compiler.c
@@ -520,6 +520,7 @@
{
bool jitActive;
bool jitActivate;
+ bool needUnchain = false;
dvmLockMutex(&gDvmJit.tableLock);
jitActive = gDvmJit.pProfTable != NULL;
@@ -527,10 +528,11 @@
if (jitActivate && !jitActive) {
gDvmJit.pProfTable = gDvmJit.pProfTableCopy;
- dvmUnlockMutex(&gDvmJit.tableLock);
} else if (!jitActivate && jitActive) {
gDvmJit.pProfTable = NULL;
- dvmUnlockMutex(&gDvmJit.tableLock);
- dvmJitUnchainAll();
+ needUnchain = true;
}
+ dvmUnlockMutex(&gDvmJit.tableLock);
+ if (needUnchain)
+ dvmJitUnchainAll();
}