[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