[vmkit-commits] [vmkit] r111107 - in /vmkit/trunk/lib/J3/VMCore: JavaLocks.cpp JavaLocks.h
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Sun Aug 15 11:28:33 PDT 2010
Author: geoffray
Date: Sun Aug 15 13:28:33 2010
New Revision: 111107
URL: http://llvm.org/viewvc/llvm-project?rev=111107&view=rev
Log:
Code cleanup. No functionality change.
Modified:
vmkit/trunk/lib/J3/VMCore/JavaLocks.cpp
vmkit/trunk/lib/J3/VMCore/JavaLocks.h
Modified: vmkit/trunk/lib/J3/VMCore/JavaLocks.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaLocks.cpp?rev=111107&r1=111106&r2=111107&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/JavaLocks.cpp (original)
+++ vmkit/trunk/lib/J3/VMCore/JavaLocks.cpp Sun Aug 15 13:28:33 2010
@@ -32,10 +32,11 @@
threadLock.lock();
// Try the freeLock list.
- if (freeLock) {
+ if (freeLock != NULL) {
res = freeLock;
freeLock = res->nextFreeLock;
res->nextFreeLock = 0;
+ assert(res->associatedObject == NULL);
threadLock.unlock();
res->associatedObject = obj;
} else {
@@ -61,10 +62,18 @@
uint32_t internalIndex = index & BitMask;
tab[internalIndex] = res;
}
-
+
// Return the lock.
return res;
}
+
+void LockSystem::deallocate(JavaLock* lock) {
+ lock->associatedObject = NULL;
+ threadLock.lock();
+ lock->nextFreeLock = freeLock;
+ freeLock = lock;
+ threadLock.unlock();
+}
LockSystem::LockSystem(Jnjvm* vm) {
associatedVM = vm;
@@ -73,6 +82,7 @@
LockTable[0] = (JavaLock**)
vm->allocator.Allocate(IndexSize * sizeof(JavaLock*), "Index LockTable");
currentIndex = 0;
+ freeLock = NULL;
}
uintptr_t JavaLock::getID() {
@@ -92,12 +102,34 @@
void JavaLock::release(JavaObject* obj) {
llvm_gcroot(obj, 0);
+ assert(associatedObject && "No associated object when releasing");
assert(associatedObject == obj && "Mismatch object in lock");
if (!waitingThreads && !lockingThreads &&
internalLock.recursionCount() == 1) {
- assert(associatedObject && "No associated object when releasing");
associatedObject->lock.initialise();
deallocate();
}
internalLock.unlock();
}
+
+/// acquire - Acquires the internalLock.
+///
+bool JavaLock::acquire(JavaObject* obj) {
+ llvm_gcroot(obj, 0);
+
+ spinLock.lock();
+ lockingThreads++;
+ spinLock.unlock();
+
+ internalLock.lock();
+
+ spinLock.lock();
+ lockingThreads--;
+ spinLock.unlock();
+
+ if (associatedObject != obj) {
+ internalLock.unlock();
+ return false;
+ }
+ return true;
+ }
Modified: vmkit/trunk/lib/J3/VMCore/JavaLocks.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaLocks.h?rev=111107&r1=111106&r2=111107&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/JavaLocks.h (original)
+++ vmkit/trunk/lib/J3/VMCore/JavaLocks.h Sun Aug 15 13:28:33 2010
@@ -50,25 +50,7 @@
/// acquire - Acquires the internalLock.
///
- bool acquire(JavaObject* obj) {
- llvm_gcroot(obj, 0);
-
- spinLock.lock();
- lockingThreads++;
- spinLock.unlock();
-
- internalLock.lock();
-
- spinLock.lock();
- lockingThreads--;
- spinLock.unlock();
-
- if (associatedObject != obj) {
- internalLock.unlock();
- return false;
- }
- return true;
- }
+ bool acquire(JavaObject* obj);
/// tryAcquire - Tries to acquire the lock.
///
@@ -106,6 +88,7 @@
associatedObject = a;
waitingThreads = 0;
lockingThreads = 0;
+ nextFreeLock = NULL;
}
static JavaLock* allocate(JavaObject*);
@@ -159,13 +142,7 @@
/// deallocate - Put a lock in the free list lock.
///
- void deallocate(JavaLock* lock) {
- lock->associatedObject = NULL;
- threadLock.lock();
- lock->nextFreeLock = freeLock;
- freeLock = lock;
- threadLock.unlock();
- }
+ void deallocate(JavaLock* lock);
/// LockSystem - Default constructor. Initialize the table.
///
More information about the vmkit-commits
mailing list