]> gitweb.factorcode.org Git - factor.git/blobdiff - vm/os-windows-nt.cpp
thread_id is a pthread_t on unix
[factor.git] / vm / os-windows-nt.cpp
index fbaadaaba7e2799d3080753cad85aff2739f56de..ee00e1434a893f15a7e16e69fbd87fbc99446a87 100755 (executable)
@@ -3,12 +3,31 @@
 namespace factor
 {
 
+
 THREADHANDLE start_thread(void *(*start_routine)(void *),void *args){
     return (void*) CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)start_routine, args, 0, 0); 
 }
 
-unsigned long thread_id(){
-       return GetCurrentThreadId();
+
+DWORD dwTlsIndex; 
+
+void init_platform_globals()
+{
+       if ((dwTlsIndex = TlsAlloc()) == TLS_OUT_OF_INDEXES) {
+               fatal_error("TlsAlloc failed - out of indexes",0);
+       }
+}
+
+void register_vm_with_thread(factorvm *vm)
+{
+       if (! TlsSetValue(dwTlsIndex, vm)) {
+               fatal_error("TlsSetValue failed",0);
+       }
+}
+
+factorvm *tls_vm()
+{
+       return (factorvm*)TlsGetValue(dwTlsIndex);
 }
 
 
@@ -22,7 +41,7 @@ s64 current_micros()
 
 FACTOR_STDCALL LONG exception_handler(PEXCEPTION_POINTERS pe)
 {
-       factorvm *myvm = lookup_vm(GetCurrentThreadId());
+       factorvm *myvm = SIGNAL_VM_PTR();
        PEXCEPTION_RECORD e = (PEXCEPTION_RECORD)pe->ExceptionRecord;
        CONTEXT *c = (CONTEXT*)pe->ContextRecord;