[vmkit-commits] [vmkit] r105916 - in /vmkit/trunk/lib/J3/VMCore: JavaConstantPool.cpp JavaLocks.cpp JavaLocks.h VirtualTables.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Sun Jun 13 09:48:24 PDT 2010


Author: geoffray
Date: Sun Jun 13 11:48:24 2010
New Revision: 105916

URL: http://llvm.org/viewvc/llvm-project?rev=105916&view=rev
Log:
Also trace associated objects of locks.


Modified:
    vmkit/trunk/lib/J3/VMCore/JavaConstantPool.cpp
    vmkit/trunk/lib/J3/VMCore/JavaLocks.cpp
    vmkit/trunk/lib/J3/VMCore/JavaLocks.h
    vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp

Modified: vmkit/trunk/lib/J3/VMCore/JavaConstantPool.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaConstantPool.cpp?rev=105916&r1=105915&r2=105916&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/JavaConstantPool.cpp (original)
+++ vmkit/trunk/lib/J3/VMCore/JavaConstantPool.cpp Sun Jun 13 11:48:24 2010
@@ -518,8 +518,10 @@
 }
 
 JavaString* JavaConstantPool::resolveString(const UTF8* utf8, uint16 index) {
+  JavaString* str = NULL;
+  llvm_gcroot(str, 0);
   Jnjvm* vm = JavaThread::get()->getJVM();
-  JavaString* str = vm->internalUTF8ToStr(utf8);
+  str = vm->internalUTF8ToStr(utf8);
   return str;
 }
 

Modified: vmkit/trunk/lib/J3/VMCore/JavaLocks.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaLocks.cpp?rev=105916&r1=105915&r2=105916&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/JavaLocks.cpp (original)
+++ vmkit/trunk/lib/J3/VMCore/JavaLocks.cpp Sun Jun 13 11:48:24 2010
@@ -14,6 +14,7 @@
 using namespace j3;
 
 JavaLock* JavaLock::allocate(JavaObject* obj) {
+  llvm_gcroot(obj, 0);
   Jnjvm* vm = JavaThread::get()->getJVM();
   JavaLock* res = vm->lockSystem.allocate(obj);  
   return res;
@@ -25,7 +26,8 @@
 }
 
 JavaLock* LockSystem::allocate(JavaObject* obj) { 
-  
+ 
+  llvm_gcroot(obj, 0); 
   JavaLock* res = 0;
   threadLock.lock();
 
@@ -88,8 +90,8 @@
 }
 
 void JavaLock::release(JavaObject* obj) {
-  assert(associatedObject == obj && "Mismatch object in lock");
   llvm_gcroot(obj, 0);
+  assert(associatedObject == obj && "Mismatch object in lock");
   if (!waitingThreads && !lockingThreads &&
       internalLock.recursionCount() == 1) {
     assert(associatedObject && "No associated object when releasing");

Modified: vmkit/trunk/lib/J3/VMCore/JavaLocks.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaLocks.h?rev=105916&r1=105915&r2=105916&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/JavaLocks.h (original)
+++ vmkit/trunk/lib/J3/VMCore/JavaLocks.h Sun Jun 13 11:48:24 2010
@@ -44,6 +44,10 @@
     return associatedObject;
   }
 
+  JavaObject** getAssociatedObjectPtr() {
+    return &associatedObject;
+  }
+
   /// acquire - Acquires the internalLock.
   ///
   bool acquire(JavaObject* obj) {
@@ -159,7 +163,7 @@
   /// deallocate - Put a lock in the free list lock.
   ///
   void deallocate(JavaLock* lock) {
-    lock->associatedObject = 0;
+    lock->associatedObject = NULL;
     threadLock.lock();
     lock->nextFreeLock = freeLock;
     freeLock = lock;

Modified: vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp?rev=105916&r1=105915&r2=105916&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp (original)
+++ vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp Sun Jun 13 11:48:24 2010
@@ -282,7 +282,16 @@
     JavaString** str = &(i->second);
     mvm::Collector::markAndTraceRoot(str, closure);
   }
-
+ 
+  for (uint32 i = 0; i < LockSystem::GlobalSize; i++) {
+    JavaLock** array = lockSystem.LockTable[i];
+    if (array == NULL) break;
+    for (uint32 j = 0; j < LockSystem::IndexSize; j++) {
+      if (array[j] == NULL) break;
+      JavaLock* lock = array[j];
+      mvm::Collector::markAndTraceRoot(lock->getAssociatedObjectPtr(), closure);
+    }
+  }
 #if defined(ISOLATE_SHARING)
   mvm::Collector::markAndTraceRoot(&JnjvmSharedLoader::sharedLoader, closure);
 #endif





More information about the vmkit-commits mailing list