VM: Refactor mvm* to Factor style

db4
Erik Charlebois 2013-05-11 22:14:17 -04:00
parent d9e225e1dc
commit d57c1cc579
5 changed files with 53 additions and 70 deletions

View File

@ -1,24 +1,16 @@
#include "master.hpp" #include "master.hpp"
namespace factor namespace factor {
{
factor_vm *global_vm; factor_vm* global_vm;
void init_mvm() void init_mvm() { global_vm = NULL; }
{
global_vm = NULL;
}
void register_vm_with_thread(factor_vm *vm) void register_vm_with_thread(factor_vm* vm) {
{
FACTOR_ASSERT(!global_vm); FACTOR_ASSERT(!global_vm);
global_vm = vm; global_vm = vm;
} }
factor_vm *current_vm_p() factor_vm* current_vm_p() { return global_vm; }
{
return global_vm;
}
} }

View File

@ -1,23 +1,19 @@
#include "master.hpp" #include "master.hpp"
namespace factor namespace factor {
{
pthread_key_t current_vm_tls_key; pthread_key_t current_vm_tls_key;
void init_mvm() void init_mvm() {
{ if (pthread_key_create(&current_vm_tls_key, NULL) != 0)
if(pthread_key_create(&current_vm_tls_key, NULL) != 0) fatal_error("pthread_key_create() failed", 0);
fatal_error("pthread_key_create() failed",0);
} }
void register_vm_with_thread(factor_vm *vm) void register_vm_with_thread(factor_vm* vm) {
{ pthread_setspecific(current_vm_tls_key, vm);
pthread_setspecific(current_vm_tls_key,vm);
} }
factor_vm *current_vm_p() factor_vm* current_vm_p() {
{
return (factor_vm*)pthread_getspecific(current_vm_tls_key); return (factor_vm*)pthread_getspecific(current_vm_tls_key);
} }

View File

@ -1,25 +1,21 @@
#include "master.hpp" #include "master.hpp"
namespace factor namespace factor {
{
DWORD current_vm_tls_key; DWORD current_vm_tls_key;
void init_mvm() void init_mvm() {
{ if ((current_vm_tls_key = TlsAlloc()) == TLS_OUT_OF_INDEXES)
if((current_vm_tls_key = TlsAlloc()) == TLS_OUT_OF_INDEXES) fatal_error("TlsAlloc() failed", 0);
fatal_error("TlsAlloc() failed",0);
} }
void register_vm_with_thread(factor_vm *vm) void register_vm_with_thread(factor_vm* vm) {
{ if (!TlsSetValue(current_vm_tls_key, vm))
if(!TlsSetValue(current_vm_tls_key, vm)) fatal_error("TlsSetValue() failed", 0);
fatal_error("TlsSetValue() failed",0);
} }
factor_vm *current_vm_p() factor_vm* current_vm_p() {
{ return (factor_vm*)TlsGetValue(current_vm_tls_key);
return (factor_vm *)TlsGetValue(current_vm_tls_key);
} }
} }

View File

@ -1,31 +1,31 @@
#include "master.hpp" #include "master.hpp"
namespace factor namespace factor {
{
std::map<THREADHANDLE, factor_vm*> thread_vms; std::map<THREADHANDLE, factor_vm*> thread_vms;
struct startargs { struct startargs {
int argc; int argc;
vm_char **argv; vm_char** argv;
}; };
// arg must be new'ed because we're going to delete it! // arg must be new'ed because we're going to delete it!
void *start_standalone_factor_thread(void *arg) void* start_standalone_factor_thread(void* arg) {
{ factor_vm* newvm = new_factor_vm();
factor_vm *newvm = new_factor_vm(); startargs* args = (startargs*)arg;
startargs *args = (startargs*) arg; int argc = args->argc;
int argc = args->argc; vm_char **argv = args->argv; vm_char** argv = args->argv;
delete args; delete args;
newvm->start_standalone_factor(argc, argv); newvm->start_standalone_factor(argc, argv);
return 0; return 0;
} }
VM_C_API THREADHANDLE start_standalone_factor_in_new_thread(int argc, vm_char **argv) VM_C_API THREADHANDLE start_standalone_factor_in_new_thread(int argc,
{ vm_char** argv) {
startargs *args = new startargs; startargs* args = new startargs;
args->argc = argc; args->argv = argv; args->argc = argc;
return start_thread(start_standalone_factor_thread,args); args->argv = argv;
return start_thread(start_standalone_factor_thread, args);
} }
} }

View File

@ -1,19 +1,18 @@
namespace factor namespace factor {
{
void init_mvm(); void init_mvm();
void register_vm_with_thread(factor_vm *vm); void register_vm_with_thread(factor_vm* vm);
factor_vm *current_vm_p(); factor_vm* current_vm_p();
inline factor_vm *current_vm() inline factor_vm* current_vm() {
{ factor_vm* vm = current_vm_p();
factor_vm *vm = current_vm_p();
FACTOR_ASSERT(vm != NULL); FACTOR_ASSERT(vm != NULL);
return vm; return vm;
} }
VM_C_API THREADHANDLE start_standalone_factor_in_new_thread(int argc, vm_char **argv); VM_C_API THREADHANDLE start_standalone_factor_in_new_thread(int argc,
vm_char** argv);
extern std::map<THREADHANDLE, factor_vm *> thread_vms; extern std::map<THREADHANDLE, factor_vm*> thread_vms;
} }