[vmkit-commits] [vmkit] r180515 - Solving the deadlock problem in ClassLoaders

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


Author: peter.senna
Date: Thu Apr 25 12:18:54 2013
New Revision: 180515

URL: http://llvm.org/viewvc/llvm-project?rev=180515&view=rev
Log:
Solving the deadlock problem in ClassLoaders
(cherry picked from commit f48ae8ebafd9e6e09d6f678b29ddc9f50b99ddfb)

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=180515&r1=180514&r2=180515&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp Thu Apr 25 12:18:54 2013
@@ -324,9 +324,11 @@ UserClass* JnjvmBootstrapLoader::interna
     if (slash) {
       int packagelen = slash - cname;
       const UTF8 * package = name->extract(hashUTF8, 0, packagelen);
+      //classes->lock.lock();
       lock.lock();
       packages.insert(package);
       lock.unlock();
+      //classes->lock.unlock();
     }
   }
 
@@ -622,7 +624,7 @@ UserClass* JnjvmClassLoader::constructCl
   JavaObject* excp = NULL;
   llvm_gcroot(excp, 0);
   UserClass* res = NULL;
-  lock.lock();
+  lock2.lock();
   classes->lock.lock();
   res = (UserClass*) classes->map.lookup(name);
   classes->lock.unlock();
@@ -645,7 +647,7 @@ UserClass* JnjvmClassLoader::constructCl
       JavaThread::get()->clearException();    
     } END_CATCH;
   }
-  lock.unlock();
+  lock2.unlock();
   if (excp != NULL) {
     JavaThread::get()->throwException(excp);
   }

Modified: vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h?rev=180515&r1=180514&r2=180515&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h (original)
+++ vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h Thu Apr 25 12:18:54 2013
@@ -115,10 +115,15 @@ protected:
   ///
   SignMap* javaSignatures;
 
-  /// lock - Lock when loading classes.
+  /// lock - Lock when adding packages and Strings.
   ///
   vmkit::LockRecursive lock;
 
+  /// lock2 - Lock when loading classes.
+  ///
+  vmkit::LockRecursive lock2;
+
+
   /// registeredNatives - Stores the native function pointers corresponding
   /// to methods that were defined through JNI's RegisterNatives mechanism.
   ///





More information about the vmkit-commits mailing list