[vmkit-commits] [vmkit] r84630 - in /vmkit/trunk/lib/JnJVM/VMCore: JavaLocks.cpp Jnjvm.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Tue Oct 20 02:33:21 PDT 2009


Author: geoffray
Date: Tue Oct 20 04:33:19 2009
New Revision: 84630

URL: http://llvm.org/viewvc/llvm-project?rev=84630&view=rev
Log:
Modularize.


Added:
    vmkit/trunk/lib/JnJVM/VMCore/JavaLocks.cpp
Modified:
    vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp

Added: vmkit/trunk/lib/JnJVM/VMCore/JavaLocks.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaLocks.cpp?rev=84630&view=auto

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaLocks.cpp (added)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaLocks.cpp Tue Oct 20 04:33:19 2009
@@ -0,0 +1,99 @@
+//===------------- JavaLocks.cpp - Fat lock management --------------------===//
+//
+//                            The VMKit project
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "JavaLocks.h"
+#include "JavaThread.h"
+#include "Jnjvm.h"
+
+using namespace jnjvm;
+
+JavaLock* JavaLock::allocate(JavaObject* obj) {
+  Jnjvm* vm = JavaThread::get()->getJVM();
+  JavaLock* res = vm->lockSystem.allocate(obj);  
+  return res;
+}
+
+void JavaLock::deallocate() {
+  Jnjvm* vm = JavaThread::get()->getJVM();
+  vm->lockSystem.deallocate(this);
+}
+
+JavaLock* LockSystem::allocate(JavaObject* obj) { 
+  
+  JavaLock* res = 0;
+  threadLock.lock();
+
+  // Try the freeLock list.
+  if (freeLock) {
+    res = freeLock;
+    freeLock = res->nextFreeLock;
+    res->nextFreeLock = 0;
+    threadLock.unlock();
+    res->associatedObject = obj;
+  } else { 
+    // Get an index.
+    uint32_t index = currentIndex++;
+    if (index == MaxLocks) {
+      fprintf(stderr, "Ran out of space for allocating locks");
+      abort();
+    }
+  
+    JavaLock** tab = LockTable[index >> BitIndex];
+  
+    if (tab == NULL) 
+      tab = (JavaLock**)associatedVM->allocator.Allocate(IndexSize,
+                                                         "Index LockTable");
+    threadLock.unlock();
+   
+    // Allocate the lock.
+    res = new(associatedVM->allocator, "Lock") JavaLock(index, obj);
+    
+    // Add the lock to the table.
+    uint32_t internalIndex = index & BitMask;
+    tab[internalIndex] = res;
+  }
+    
+  // Return the lock.
+  return res;
+}
+  
+LockSystem::LockSystem(Jnjvm* vm) {
+  associatedVM = vm;
+  LockTable = (JavaLock* **)
+    vm->allocator.Allocate(GlobalSize, "Global LockTable");
+  LockTable[0] = (JavaLock**)
+    vm->allocator.Allocate(IndexSize, "Index LockTable");
+  currentIndex = 0;
+}
+
+uintptr_t JavaLock::getID() {
+  return index | mvm::FatMask;
+}
+
+JavaLock* JavaLock::getFromID(uintptr_t ID) {
+  Jnjvm* vm = JavaThread::get()->getJVM();
+  if (ID & mvm::FatMask) {
+    JavaLock* res = vm->lockSystem.getLock(ID & ~mvm::FatMask);
+    return res;
+  } else {
+    return 0;
+  }
+}
+
+void JavaLock::release(JavaObject* obj) {
+  assert(associatedObject == obj && "Mismatch object in lock");
+  llvm_gcroot(obj, 0);
+  if (!waitingThreads && !lockingThreads &&
+      internalLock.recursionCount() == 1) {
+    assert(associatedObject && "No associated object when releasing");
+    associatedObject->lock.initialise();
+    deallocate();
+  }
+  internalLock.unlock();
+}

Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp?rev=84630&r1=84629&r2=84630&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp Tue Oct 20 04:33:19 2009
@@ -1389,89 +1389,3 @@
   
   return 0; 
 }
-
-
-JavaLock* JavaLock::allocate(JavaObject* obj) {
-  Jnjvm* vm = JavaThread::get()->getJVM();
-  JavaLock* res = vm->lockSystem.allocate(obj);  
-  return res;
-}
-
-void JavaLock::deallocate() {
-  Jnjvm* vm = JavaThread::get()->getJVM();
-  vm->lockSystem.deallocate(this);
-}
-
-JavaLock* LockSystem::allocate(JavaObject* obj) { 
-  
-  JavaLock* res = 0;
-  threadLock.lock();
-
-  // Try the freeLock list.
-  if (freeLock) {
-    res = freeLock;
-    freeLock = res->nextFreeLock;
-    res->nextFreeLock = 0;
-    threadLock.unlock();
-    res->associatedObject = obj;
-  } else { 
-    // Get an index.
-    uint32_t index = currentIndex++;
-    if (index == MaxLocks) {
-      fprintf(stderr, "Ran out of space for allocating locks");
-      abort();
-    }
-  
-    JavaLock** tab = LockTable[index >> BitIndex];
-  
-    if (tab == NULL) 
-      tab = (JavaLock**)associatedVM->allocator.Allocate(IndexSize,
-                                                         "Index LockTable");
-    threadLock.unlock();
-   
-    // Allocate the lock.
-    res = new(associatedVM->allocator, "Lock") JavaLock(index, obj);
-    
-    // Add the lock to the table.
-    uint32_t internalIndex = index & BitMask;
-    tab[internalIndex] = res;
-  }
-    
-  // Return the lock.
-  return res;
-}
-  
-LockSystem::LockSystem(Jnjvm* vm) {
-  associatedVM = vm;
-  LockTable = (JavaLock* **)
-    vm->allocator.Allocate(GlobalSize, "Global LockTable");
-  LockTable[0] = (JavaLock**)
-    vm->allocator.Allocate(IndexSize, "Index LockTable");
-  currentIndex = 0;
-}
-
-uintptr_t JavaLock::getID() {
-  return index | mvm::FatMask;
-}
-
-JavaLock* JavaLock::getFromID(uintptr_t ID) {
-  Jnjvm* vm = JavaThread::get()->getJVM();
-  if (ID & mvm::FatMask) {
-    JavaLock* res = vm->lockSystem.getLock(ID & ~mvm::FatMask);
-    return res;
-  } else {
-    return 0;
-  }
-}
-
-void JavaLock::release(JavaObject* obj) {
-  assert(associatedObject == obj && "Mismatch object in lock");
-  llvm_gcroot(obj, 0);
-  if (!waitingThreads && !lockingThreads &&
-      internalLock.recursionCount() == 1) {
-    assert(associatedObject && "No associated object when releasing");
-    associatedObject->lock.initialise();
-    deallocate();
-  }
-  internalLock.unlock();
-}





More information about the vmkit-commits mailing list