[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