moved the thread stuff around a bit

Phil Dawes 2009-08-25 08:55:18 +01:00
parent f371bbbc2d
commit 1e93c766a1
7 changed files with 24 additions and 23 deletions

View File

@ -7,12 +7,12 @@ factorvm *vm;
unordered_map<long,factorvm*> thread_vms; unordered_map<long,factorvm*> thread_vms;
factorvm *lookup_vm(long threadid) factorvm *lookup_vm(unsigned long threadid)
{ {
return thread_vms[threadid]; return thread_vms[threadid];
} }
void register_vm(long threadid, factorvm *vm) void register_vm(unsigned long threadid, factorvm *vm)
{ {
thread_vms[threadid] = vm; thread_vms[threadid] = vm;
} }
@ -243,7 +243,7 @@ VM_C_API void start_standalone_factor(int argc, vm_char **argv)
return newvm->start_standalone_factor(argc,argv); return newvm->start_standalone_factor(argc,argv);
} }
VM_C_API void *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; // leaks startargs structure startargs *args = new startargs; // leaks startargs structure
args->argc = argc; args->argv = argv; args->argc = argc; args->argv = argv;

View File

@ -2,5 +2,5 @@ namespace factor
{ {
VM_C_API void start_standalone_factor(int argc, vm_char **argv); VM_C_API void start_standalone_factor(int argc, vm_char **argv);
VM_C_API void *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);
} }

View File

@ -3,7 +3,7 @@
namespace factor namespace factor
{ {
void *start_thread(void *(*start_routine)(void *),void *args) THREADHANDLE start_thread(void *(*start_routine)(void *),void *args)
{ {
pthread_attr_t attr; pthread_attr_t attr;
pthread_t thread; pthread_t thread;
@ -14,9 +14,14 @@ void *start_thread(void *(*start_routine)(void *),void *args)
if (pthread_create (&thread, &attr, start_routine, args) != 0) if (pthread_create (&thread, &attr, start_routine, args) != 0)
fatal_error("pthread_create() failed",0); fatal_error("pthread_create() failed",0);
pthread_attr_destroy (&attr); pthread_attr_destroy (&attr);
return (void*)thread; return thread;
} }
unsigned long thread_id(){
return pthread_self();
}
static void *null_dll; static void *null_dll;
s64 current_micros() s64 current_micros()
@ -56,9 +61,6 @@ void factorvm::ffi_dlclose(dll *dll)
} }
cell factorvm::thread_id(){
return pthread_self();
}
inline void factorvm::vmprim_existsp() inline void factorvm::vmprim_existsp()

View File

@ -42,12 +42,10 @@ typedef char symbol_char;
#define print_native_string(string) print_string(string) #define print_native_string(string) print_string(string)
void *start_thread(void *(*start_routine)(void *),void *args); typedef pthread_t THREADHANDLE;
void init_ffi(); THREADHANDLE start_thread(void *(*start_routine)(void *),void *args);
void ffi_dlopen(dll *dll); unsigned long thread_id();
void *ffi_dlsym(dll *dll, symbol_char *symbol);
void ffi_dlclose(dll *dll);
void unix_init_signals(); void unix_init_signals();
void signal_handler(int signal, siginfo_t* siginfo, void* uap); void signal_handler(int signal, siginfo_t* siginfo, void* uap);

View File

@ -3,16 +3,16 @@
namespace factor namespace factor
{ {
void *start_thread(void *(*start_routine)(void *),void *args){ THREADHANDLE start_thread(void *(*start_routine)(void *),void *args){
return CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)start_routine, args, 0, 0); return (void*) CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)start_routine, args, 0, 0);
} }
cell factorvm::thread_id(){ unsigned long thread_id(){
return GetCurrentThreadId(); return GetCurrentThreadId();
} }
s64 factorvm::current_micros() s64 current_micros()
{ {
FILETIME t; FILETIME t;
GetSystemTimeAsFileTime(&t); GetSystemTimeAsFileTime(&t);

View File

@ -26,7 +26,10 @@ FACTOR_STDCALL LONG exception_handler(PEXCEPTION_POINTERS pe);
#define STATUS_FLOAT_MULTIPLE_FAULTS 0xC00002B4 #define STATUS_FLOAT_MULTIPLE_FAULTS 0xC00002B4
#define STATUS_FLOAT_MULTIPLE_TRAPS 0xC00002B5 #define STATUS_FLOAT_MULTIPLE_TRAPS 0xC00002B5
void *start_thread(void *(*start_routine)(void *),void *args); typedef HANDLE THREADHANDLE;
THREADHANDLE start_thread(void *(*start_routine)(void *),void *args);
unsigned long thread_id();
#define SIGNAL_VM_PTR lookup_vm(GetCurrentThreadId()) #define SIGNAL_VM_PTR lookup_vm(GetCurrentThreadId())

View File

@ -659,7 +659,6 @@ struct factorvm {
// os-* // os-*
inline void vmprim_existsp(); inline void vmprim_existsp();
cell thread_id();
void init_ffi(); void init_ffi();
void ffi_dlopen(dll *dll); void ffi_dlopen(dll *dll);
void *ffi_dlsym(dll *dll, symbol_char *symbol); void *ffi_dlsym(dll *dll, symbol_char *symbol);
@ -677,7 +676,6 @@ struct factorvm {
bool windows_stat(vm_char *path); bool windows_stat(vm_char *path);
#if defined(WINNT) #if defined(WINNT)
s64 current_micros();
void c_to_factor_toplevel(cell quot); void c_to_factor_toplevel(cell quot);
void open_console(); void open_console();
// next method here: // next method here:
@ -689,6 +687,6 @@ struct factorvm {
extern factorvm *vm; extern factorvm *vm;
extern factorvm *lookup_vm(long threadid); extern factorvm *lookup_vm(unsigned long threadid);
extern void register_vm(long threadid,factorvm *vm); extern void register_vm(unsigned long threadid,factorvm *vm);
} }