OSDN Git Service

JIT: Add memory barriers on monitor enter/exit [issue 2951403]
authorbuzbee <buzbee@google.com>
Thu, 26 Aug 2010 17:46:51 +0000 (10:46 -0700)
committerbuzbee <buzbee@google.com>
Fri, 27 Aug 2010 22:58:13 +0000 (15:58 -0700)
Possibly the cause of [2950977 error in onDraw() method for stingray]

Change-Id: I3237c95a34daa75cd680b73d426dde11f3611a0e

vm/compiler/codegen/arm/Thumb2/Gen.c

index de75be7..3632388 100644 (file)
@@ -213,6 +213,7 @@ static void genMonitorEnter(CompilationUnit *cUnit, MIR *mir)
             LW_LOCK_OWNER_SHIFT - 1);
     hopBranch = newLIR2(cUnit, kThumb2Cbnz, r2, 0);
     newLIR4(cUnit, kThumb2Strex, r2, r3, r1, offsetof(Object, lock) >> 2);
+    dvmCompilerGenMemBarrier(cUnit);
     branch = newLIR2(cUnit, kThumb2Cbz, r2, 0);
 
     hopTarget = newLIR0(cUnit, kArmPseudoTargetLabel);
@@ -272,6 +273,7 @@ static void genMonitorExit(CompilationUnit *cUnit, MIR *mir)
             LW_LOCK_OWNER_SHIFT - 1);
     opRegReg(cUnit, kOpSub, r2, r3);
     hopBranch = opCondBranch(cUnit, kArmCondNe);
+    dvmCompilerGenMemBarrier(cUnit);
     storeWordDisp(cUnit, r1, offsetof(Object, lock), r7);
     branch = opNone(cUnit, kOpUncondBr);