[vmkit-commits] [vmkit] r180538 - Improve to lock system in classloader

Peter Senna Tschudin peter.senna at gmail.com
Thu Apr 25 10:22:55 PDT 2013


Author: peter.senna
Date: Thu Apr 25 12:21:22 2013
New Revision: 180538

URL: http://llvm.org/viewvc/llvm-project?rev=180538&view=rev
Log:
Improve to lock system in classloader
(cherry picked from commit f3ac7f1b5943dd15df05f15839dfd7b686b68147)

Modified:
    vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp
    vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h

Modified: vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp?rev=180538&r1=180537&r2=180538&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp Thu Apr 25 12:21:22 2013
@@ -1079,21 +1079,24 @@ word_t JnjvmClassLoader::nativeLookup(Ja
 }
 
 
-JavaString** StringList::addString(JnjvmClassLoader* JCL, JavaString* obj) {
+JavaString** StringList::addString(JnjvmClassLoader* JCL, JavaString* obj, bool hasTheLock) {
   llvm_gcroot(obj, 0);
-  JCL->lock.lock();
+  if (!hasTheLock)
+	  JCL->lockForStrings.lock();
   if (length == MAXIMUM_STRINGS) {
     StringList* next = new(JCL->allocator, "StringList") StringList();
     next->prev = this;
     JCL->strings = next;
-    JavaString** res = next->addString(JCL, obj);
-    JCL->lock.unlock();
+    JavaString** res = next->addString(JCL, obj, true);
+    if (!hasTheLock)
+    	JCL->lockForStrings.unlock();
     return res;
   } else {
     vmkit::Collector::objectReferenceNonHeapWriteBarrier(
         (gc**)&(strings[length]), (gc*)obj);
     JavaString** res = &strings[length++];
-    JCL->lock.unlock();
+    if (!hasTheLock)
+    	JCL->lockForStrings.unlock();
     return res;
   }
 }

Modified: vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h?rev=180538&r1=180537&r2=180538&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h (original)
+++ vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h Thu Apr 25 12:21:22 2013
@@ -116,9 +116,13 @@ protected:
   ///
   SignMap* javaSignatures;
 
-  /// lock - Lock when adding packages and Strings.
+  /// lock - Lock to add packages.
   ///
-  vmkit::LockRecursive lock;
+  vmkit::LockNormal lock;
+
+  /// Lock to add Strings
+  ///
+  vmkit::SpinLock lockForStrings;
 
   /// lock2 - Lock when loading classes.
   ///
@@ -567,7 +571,7 @@ public:
     length = 0;
   }
 
-  JavaString** addString(JnjvmClassLoader* JCL, JavaString* obj);
+  JavaString** addString(JnjvmClassLoader* JCL, JavaString* obj, bool hasTheLock = false);
 };
 
 } // end namespace j3





More information about the vmkit-commits mailing list