[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