[vmkit-commits] [vmkit] r198215 - Add a compiler lock, but it's not enough. LLVMContext is definitly not thread safe...

Gael Thomas gael.thomas at lip6.fr
Mon Dec 30 08:31:27 PST 2013


Author: gthomas
Date: Mon Dec 30 10:31:27 2013
New Revision: 198215

URL: http://llvm.org/viewvc/llvm-project?rev=198215&view=rev
Log:
Add a compiler lock, but it's not enough. LLVMContext is definitly not thread safe...

Modified:
    vmkit/branches/mcjit/include/j3/j3.h
    vmkit/branches/mcjit/include/vmkit/vmkit.h
    vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc
    vmkit/branches/mcjit/lib/j3/vm/j3.cc
    vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc
    vmkit/branches/mcjit/lib/vmkit/vmkit.cc

Modified: vmkit/branches/mcjit/include/j3/j3.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3.h?rev=198215&r1=198214&r2=198215&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3.h (original)
+++ vmkit/branches/mcjit/include/j3/j3.h Mon Dec 30 10:31:27 2013
@@ -70,6 +70,8 @@ namespace j3 {
 		J3Field*         threadVMData;
 		J3Method*        threadRun;
 
+		J3Class*         fieldClass;
+
 		const vmkit::Name* codeAttr;
 		const vmkit::Name* constantValueAttr;
 		const vmkit::Name* initName;

Modified: vmkit/branches/mcjit/include/vmkit/vmkit.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/vmkit/vmkit.h?rev=198215&r1=198214&r2=198215&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/vmkit/vmkit.h (original)
+++ vmkit/branches/mcjit/include/vmkit/vmkit.h Mon Dec 30 10:31:27 2013
@@ -29,6 +29,7 @@ namespace vmkit {
 		llvm::Module*                           _self;
 		llvm::DataLayout*                       _dataLayout;
 		void*                                   ptrTypeInfo;
+		pthread_mutex_t                         _compilerLock;
 
 		void                            addSymbol(llvm::GlobalValue* gv);
 
@@ -41,6 +42,9 @@ namespace vmkit {
 
 		VMKit(BumpAllocator* allocator);
 
+		void                       lockCompiler();
+		void                       unlockCompiler();
+
 		const char*                selfBitCodePath() { return _selfBitCodePath; }
 
 		void                       addSafepoint(Safepoint* sf);

Modified: vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc?rev=198215&r1=198214&r2=198215&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc (original)
+++ vmkit/branches/mcjit/lib/j3/openjdk/j3openjdk.cc Mon Dec 30 10:31:27 2013
@@ -384,7 +384,14 @@ jbyteArray JNICALL JVM_GetClassTypeAnnot
  */
 
 jobjectArray JNICALL JVM_GetClassDeclaredMethods(JNIEnv* env, jclass ofClass, jboolean publicOnly) { enterJVM(); NYI(); leaveJVM(); }
-jobjectArray JNICALL JVM_GetClassDeclaredFields(JNIEnv* env, jclass ofClass, jboolean publicOnly) { enterJVM(); NYI(); leaveJVM(); }
+jobjectArray JNICALL JVM_GetClassDeclaredFields(JNIEnv* env, jclass ofClass, jboolean publicOnly) { 
+	enterJVM(); 
+	J3ObjectType* type = J3ObjectType::nativeClass(ofClass);
+
+	NYI(); 
+	leaveJVM(); 
+}
+
 jobjectArray JNICALL JVM_GetClassDeclaredConstructors(JNIEnv* env, jclass ofClass, jboolean publicOnly) { enterJVM(); NYI(); leaveJVM(); }
 
 /* Differs from JVM_GetClassModifiers in treatment of inner classes.

Modified: vmkit/branches/mcjit/lib/j3/vm/j3.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3.cc?rev=198215&r1=198214&r2=198215&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3.cc Mon Dec 30 10:31:27 2013
@@ -111,6 +111,8 @@ void J3::run() {
 		->findVirtualField(names()->get(L"eetop"), typeLong);
 	threadRun                = initialClassLoader->method(0, L"java/lang/Thread", L"run", L"()V");
 
+	fieldClass               = initialClassLoader->loadClass(names()->get("java/lang/reflect/Field"));
+
 	J3Lib::bootstrap(this);
 }
 

Modified: vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc?rev=198215&r1=198214&r2=198215&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc Mon Dec 30 10:31:27 2013
@@ -107,7 +107,9 @@ void J3CodeGen::operator delete(void* pt
 
 void J3CodeGen::translate(J3Method* method, llvm::Function* llvmFunction) {
 	vmkit::BumpAllocator* allocator = vmkit::BumpAllocator::create();
+	method->cl()->loader()->vm()->lockCompiler();
 	delete new(allocator) J3CodeGen(allocator, method, llvmFunction);
+	method->cl()->loader()->vm()->unlockCompiler();
 	vmkit::BumpAllocator::destroy(allocator);
 }
 

Modified: vmkit/branches/mcjit/lib/vmkit/vmkit.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/vmkit/vmkit.cc?rev=198215&r1=198214&r2=198215&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/vmkit/vmkit.cc (original)
+++ vmkit/branches/mcjit/lib/vmkit/vmkit.cc Mon Dec 30 10:31:27 2013
@@ -37,6 +37,7 @@ VMKit::VMKit(vmkit::BumpAllocator* alloc
 	llvm::llvm_start_multithreaded();
 	_allocator = allocator;
 	pthread_mutex_init(&safepointMapLock, 0);
+	pthread_mutex_init(&_compilerLock, 0);
 }
 
 void* VMKit::operator new(size_t n, vmkit::BumpAllocator* allocator) {
@@ -47,6 +48,14 @@ void VMKit::destroy(VMKit* vm) {
 	vmkit::BumpAllocator::destroy(vm->allocator());
 }
 
+void VMKit::lockCompiler() {
+	pthread_mutex_lock(&_compilerLock);
+}
+
+void VMKit::unlockCompiler() {
+	pthread_mutex_unlock(&_compilerLock);
+}
+
 void VMKit::addSafepoint(Safepoint* sf) {
 	pthread_mutex_lock(&safepointMapLock);
 	safepointMap[sf->addr()] = sf;





More information about the vmkit-commits mailing list