[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