[vmkit-commits] [vmkit] r180532 - More fixes in Lock System for ClassLoaders
Peter Senna Tschudin
peter.senna at gmail.com
Thu Apr 25 10:22:52 PDT 2013
Author: peter.senna
Date: Thu Apr 25 12:20:55 2013
New Revision: 180532
URL: http://llvm.org/viewvc/llvm-project?rev=180532&view=rev
Log:
More fixes in Lock System for ClassLoaders
(cherry picked from commit 321a9f4c0c0ec148df4bcd9f08f0133dc2bf38dc)
Modified:
vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp
vmkit/trunk/lib/j3/VMCore/LockedMap.h
Modified: vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp?rev=180532&r1=180531&r2=180532&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp Thu Apr 25 12:20:55 2013
@@ -665,15 +665,19 @@ UserClassArray* JnjvmClassLoader::constr
assert(baseClass->classLoader == this &&
"constructing an array with wrong loader");
UserClassArray* res = 0;
+ lock2.lock();
classes->lock.lock();
res = (UserClassArray*) classes->map.lookup(name);
+ classes->lock.unlock();
if (res == NULL) {
const UTF8* internalName = readerConstructUTF8(name->elements, name->size);
res = new(allocator, "Array class") UserClassArray(this, internalName,
baseClass);
+ classes->lock.lock();
classes->map.insert(std::make_pair(internalName, res));
+ classes->lock.unlock();
}
- classes->lock.unlock();
+ lock2.unlock();
return res;
}
@@ -1082,8 +1086,9 @@ JavaString** StringList::addString(Jnjvm
StringList* next = new(JCL->allocator, "StringList") StringList();
next->prev = this;
JCL->strings = next;
+ JavaString** res = next->addString(JCL, obj);
JCL->lock.unlock();
- return next->addString(JCL, obj);
+ return res;
} else {
vmkit::Collector::objectReferenceNonHeapWriteBarrier(
(gc**)&(strings[length]), (gc*)obj);
Modified: vmkit/trunk/lib/j3/VMCore/LockedMap.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/LockedMap.h?rev=180532&r1=180531&r2=180532&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/LockedMap.h (original)
+++ vmkit/trunk/lib/j3/VMCore/LockedMap.h Thu Apr 25 12:20:55 2013
@@ -39,7 +39,7 @@ public:
ClassMap() {}
ClassMap(vmkit::VmkitDenseMap<const vmkit::UTF8*, UserCommonClass*>* precompiled) : map(*precompiled) {}
- vmkit::LockRecursive lock;
+ vmkit::SpinLock lock;
vmkit::VmkitDenseMap<const vmkit::UTF8*, UserCommonClass*> map;
typedef vmkit::VmkitDenseMap<const vmkit::UTF8*, UserCommonClass*>::iterator iterator;
};
More information about the vmkit-commits
mailing list