[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