[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