[vmkit-commits] [vmkit] r198106 - simplify thread allocation

Gael Thomas gael.thomas at lip6.fr
Sat Dec 28 00:58:30 PST 2013


Author: gthomas
Date: Sat Dec 28 02:58:30 2013
New Revision: 198106

URL: http://llvm.org/viewvc/llvm-project?rev=198106&view=rev
Log:
simplify thread allocation

Modified:
    vmkit/branches/mcjit/include/j3/j3.h
    vmkit/branches/mcjit/include/j3/j3thread.h
    vmkit/branches/mcjit/include/vmkit/thread.h
    vmkit/branches/mcjit/lib/j3/vm/j3.cc
    vmkit/branches/mcjit/lib/j3/vm/j3thread.cc
    vmkit/branches/mcjit/lib/vmkit/thread.cc

Modified: vmkit/branches/mcjit/include/j3/j3.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3.h?rev=198106&r1=198105&r2=198106&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3.h (original)
+++ vmkit/branches/mcjit/include/j3/j3.h Sat Dec 28 02:58:30 2013
@@ -97,6 +97,7 @@ namespace j3 {
 		J3ObjectHandle*            nameToString(const vmkit::Name* name);
 		J3ObjectHandle*            arrayToString(J3ObjectHandle* array);
 
+		void                       run();
 		void                       start(int argc, char** argv);
 
 		void                       vinternalError(const wchar_t* msg, va_list va) __attribute__((noreturn));

Modified: vmkit/branches/mcjit/include/j3/j3thread.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3thread.h?rev=198106&r1=198105&r2=198106&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3thread.h (original)
+++ vmkit/branches/mcjit/include/j3/j3thread.h Sat Dec 28 02:58:30 2013
@@ -28,9 +28,8 @@ namespace j3 {
 		virtual void run();
 		static void doRun();
 
-		J3Thread(J3* vm, vmkit::BumpAllocator* allocator);
 	public:
-		static J3Thread*  create(J3* j3);
+		J3Thread(J3* vm, vmkit::BumpAllocator* allocator);
 
 		void               assocJavaThread(J3ObjectHandle* javaThread);
 		J3ObjectHandle*    javaThread() { return _javaThread; }
@@ -58,6 +57,13 @@ namespace j3 {
 
 		static void start(J3ObjectHandle* handle);
 	};
+
+	class J3ThreadBootstrap : public J3Thread {
+	public:
+		J3ThreadBootstrap(J3* j3, vmkit::BumpAllocator* allocator);
+
+		void run();
+	};
 }
 
 #endif

Modified: vmkit/branches/mcjit/include/vmkit/thread.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/vmkit/thread.h?rev=198106&r1=198105&r2=198106&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/vmkit/thread.h (original)
+++ vmkit/branches/mcjit/include/vmkit/thread.h Sat Dec 28 02:58:30 2013
@@ -10,21 +10,21 @@ namespace vmkit {
 	class VMKit;
 
 	class Thread : protected PermanentObject {
-		BumpAllocator*       _allocator;
 		VMKit*               _vm;
+		pthread_t            _tid;
 
 		static void* doRun(void* thread);
 
-	protected:
-		Thread(VMKit* vm, BumpAllocator* allocator);
-
 	public:
-		static void destroy(Thread* thread);
+		Thread(VMKit* vm);
+		virtual ~Thread() {}
+
+		void* operator new(size_t n, BumpAllocator* allocator);
+		void operator delete(void* p);
 
 		virtual void run() {}
 
 		VMKit* vm() { return _vm; }
-		BumpAllocator* allocator() { return _allocator; }
 
 		static __thread Thread* _thread;
 
@@ -32,6 +32,7 @@ namespace vmkit {
 		static void set(Thread* thread) { _thread = thread; }
 
 		void start();
+		void join();
 	};
 
 	class StackWalker {

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=198106&r1=198105&r2=198106&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3.cc Sat Dec 28 02:58:30 2013
@@ -64,10 +64,17 @@ void J3::introspect() {
 void J3::start(int argc, char** argv) {
 	_options.process(argc, argv);
 
-	J3Thread* thread = J3Thread::create(this);
+	vmkit::BumpAllocator* threadAllocator = vmkit::BumpAllocator::create();
+	J3Thread* thread = new(threadAllocator) J3ThreadBootstrap(this, threadAllocator);
 
 	vmkitBootstrap(thread, options()->selfBitCodePath);
+	
+	//thread->start();
+	//thread->join();
+	run();
+}
 
+void J3::run() {
 	introspect();
 
 	vmkit::BumpAllocator* loaderAllocator = vmkit::BumpAllocator::create();

Modified: vmkit/branches/mcjit/lib/j3/vm/j3thread.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3thread.cc?rev=198106&r1=198105&r2=198106&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3thread.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3thread.cc Sat Dec 28 02:58:30 2013
@@ -9,17 +9,12 @@
 using namespace j3;
 
 J3Thread::J3Thread(J3* vm, vmkit::BumpAllocator* allocator) : 
-	Thread(vm, allocator),
+	Thread(vm),
 	_allocator(allocator),
 	_localReferences(_allocator) {
 	_jniEnv.functions = &jniEnvTable;
 }
 
-J3Thread* J3Thread::create(J3* j3) {
-	vmkit::BumpAllocator* allocator = vmkit::BumpAllocator::create();
-	return new(allocator) J3Thread(j3, allocator);
-}
-
 void J3Thread::doRun() {
 	J3ObjectHandle* handle = get()->javaThread();
 	get()->vm()->threadRun->invokeVirtual(handle);
@@ -31,7 +26,8 @@ void J3Thread::run() {
 }
 
 void J3Thread::start(J3ObjectHandle* handle) {
-	J3Thread* thread = create(J3Thread::get()->vm());
+	vmkit::BumpAllocator* allocator = vmkit::BumpAllocator::create();
+	J3Thread* thread = new(allocator) J3Thread(get()->vm(), allocator);
 	thread->assocJavaThread(handle);
 	thread->Thread::start();
 	while(1);
@@ -90,3 +86,10 @@ void J3Thread::restore(J3ObjectHandle* p
 J3Thread* J3Thread::get() { 
 	return (J3Thread*)Thread::get(); 
 }
+
+J3ThreadBootstrap::J3ThreadBootstrap(J3* vm, vmkit::BumpAllocator* allocator) : J3Thread(vm, allocator) {
+}
+
+void J3ThreadBootstrap::run() {
+	vm()->run();
+}

Modified: vmkit/branches/mcjit/lib/vmkit/thread.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/vmkit/thread.cc?rev=198106&r1=198105&r2=198106&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/vmkit/thread.cc (original)
+++ vmkit/branches/mcjit/lib/vmkit/thread.cc Sat Dec 28 02:58:30 2013
@@ -6,13 +6,16 @@ using namespace vmkit;
 
 __thread Thread* Thread::_thread = 0;
 
-Thread::Thread(VMKit* vm, BumpAllocator* allocator) { 
-	_allocator = allocator;
+Thread::Thread(VMKit* vm) { 
 	_vm = vm; 
 }
 
-void Thread::destroy(Thread* thread) {
-	BumpAllocator::destroy(thread->allocator());
+void* Thread::operator new(size_t n, BumpAllocator* allocator) {
+	return allocator->allocate(n);
+}
+
+void Thread::operator delete(void* p) {
+	VMKit::internalError(L"not yet implemented");
 }
 
 void* Thread::doRun(void* _thread) {
@@ -23,8 +26,12 @@ void* Thread::doRun(void* _thread) {
 }
 
 void Thread::start() {
-	pthread_t tid;
-	pthread_create(&tid, 0, doRun, this);
+	pthread_create(&_tid, 0, doRun, this);
+}
+
+void Thread::join() {
+	void* res;
+	pthread_join(_tid, &res);
 }
 
 StackWalker::StackWalker(uint32_t initialPop) {





More information about the vmkit-commits mailing list