[vmkit-commits] [vmkit] r85761 - in /vmkit/trunk: include/mvm/Threads/Locks.h lib/JnJVM/VMCore/JavaObject.h

Nicolas Geoffray nicolas.geoffray at lip6.fr
Sun Nov 1 15:31:48 PST 2009


Author: geoffray
Date: Sun Nov  1 17:31:47 2009
New Revision: 85761

URL: http://llvm.org/viewvc/llvm-project?rev=85761&view=rev
Log:
Bugfixes when moving from thin to fat lock.


Modified:
    vmkit/trunk/include/mvm/Threads/Locks.h
    vmkit/trunk/lib/JnJVM/VMCore/JavaObject.h

Modified: vmkit/trunk/include/mvm/Threads/Locks.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/Threads/Locks.h?rev=85761&r1=85760&r2=85761&view=diff

==============================================================================
--- vmkit/trunk/include/mvm/Threads/Locks.h (original)
+++ vmkit/trunk/include/mvm/Threads/Locks.h Sun Nov  1 17:31:47 2009
@@ -184,6 +184,7 @@
 #endif
 
   static const uint64_t ThinCountMask = 0xFF000;
+  static const uint64_t ThinCountShift = 12;
   static const uint64_t ThinCountAdd = 0x1000;
   static const uint64_t GCMask = 0x3;
 
@@ -232,11 +233,12 @@
 
   /// overflowThinlock - Change the lock of this object to a fat lock because
   /// we have reached 0xFF locks.
-  void overflowThinLock(Owner* O = 0) {
+  void overflowThinLock(Owner* O) {
     IsGC::gcroot(O, 0);
     TFatLock* obj = TFatLock::allocate(O);
-    obj->acquireAll(257);
-    lock = obj->getID();
+    obj->acquireAll((ThinCountMask >> ThinCountShift) + 1);
+    uintptr_t oldLock = lock;
+    lock = obj->getID() | (oldLock & IsGC::mask());
   }
  
   /// initialise - Initialise the value of the lock.
@@ -257,7 +259,7 @@
     IsGC::gcroot(O, 0);
     if (!(lock & FatMask)) {
       TFatLock* obj = TFatLock::allocate(O);
-      uint32 count = lock & ThinCountMask;
+      uint32 count = (lock & ThinCountMask) >> ThinCountShift;
       obj->acquireAll(count + 1);
       uintptr_t oldLock = lock;
       lock = obj->getID() | (oldLock & IsGC::mask());

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaObject.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaObject.h?rev=85761&r1=85760&r2=85761&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaObject.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaObject.h Sun Nov  1 17:31:47 2009
@@ -222,7 +222,7 @@
   /// overflowThinLock - Notify that the thin lock has overflowed.
   ///
   void overflowThinLock() {
-    lock.overflowThinLock();
+    lock.overflowThinLock(this);
   }
 
   /// instanceOf - Is this object's class of type the given class?





More information about the vmkit-commits mailing list