[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