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,24 +1,20 @@
#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,7 +1,6 @@
#include "master.hpp" #include "master.hpp"
namespace factor namespace factor {
{
std::map<THREADHANDLE, factor_vm*> thread_vms; std::map<THREADHANDLE, factor_vm*> thread_vms;
@ -11,20 +10,21 @@ struct startargs {
}; };
// 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; vm_char **argv = args->argv; int argc = args->argc;
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;
args->argv = argv;
return start_thread(start_standalone_factor_thread, args); return start_thread(start_standalone_factor_thread, args);
} }

View File

@ -1,18 +1,17 @@
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;