about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2023-10-17 17:29:32 +0200
committerptitSeb <sebastien.chev@gmail.com>2023-10-17 17:29:32 +0200
commit5493ab345ac2af9ac3a3ef0bfd321eaf3910460c (patch)
tree43bd5139f78da43c0937c59c8ecaaf491bf5890f /src
parent2589f7db14f7739f58c2e2c9634799c629307a15 (diff)
downloadbox64-5493ab345ac2af9ac3a3ef0bfd321eaf3910460c.tar.gz
box64-5493ab345ac2af9ac3a3ef0bfd321eaf3910460c.zip
Some more rollback on tls destructor (more work needed on threads cleanup handling)
Diffstat (limited to 'src')
-rw-r--r--src/box64context.c2
-rw-r--r--src/emu/x64int3.c6
-rw-r--r--src/emu/x64run.c4
-rw-r--r--src/libtools/threads.c5
4 files changed, 8 insertions, 9 deletions
diff --git a/src/box64context.c b/src/box64context.c
index e38d0d33..b302b777 100644
--- a/src/box64context.c
+++ b/src/box64context.c
@@ -238,7 +238,7 @@ box64context_t *NewBox64Context(int argc)
     init_mutexes(context);
     pthread_atfork(NULL, NULL, atfork_child_box64context);
 
-    pthread_key_create(&context->tlskey, NULL/*free_tlsdatasize*/);
+    pthread_key_create(&context->tlskey, free_tlsdatasize);
 
 
     for (int i=0; i<8; ++i) context->canary[i] = 1 +  getrand(255);
diff --git a/src/emu/x64int3.c b/src/emu/x64int3.c
index c602f61b..9f858fb0 100644
--- a/src/emu/x64int3.c
+++ b/src/emu/x64int3.c
@@ -40,7 +40,7 @@ x64emu_t* x64emu_fork(x64emu_t* emu, int forktype)
     for (int i=my_context->atfork_sz-1; i>=0; --i)
         if(my_context->atforks[i].prepare)
             EmuCall(emu, my_context->atforks[i].prepare);
-    int type = emu->type;
+    //int type = emu->type;
     int v;
     if(forktype==2) {
         iFpppp_t forkpty = (iFpppp_t)emu->forkpty_info->f;
@@ -48,8 +48,8 @@ x64emu_t* x64emu_fork(x64emu_t* emu, int forktype)
         emu->forkpty_info = NULL;
     } else
         v = fork();
-    if(type == EMUTYPE_MAIN)
-        thread_set_emu(emu);
+    /*if(type == EMUTYPE_MAIN)
+        thread_set_emu(emu);*/
     if(v==EAGAIN || v==ENOMEM) {
         // error...
     } else if(v!=0) {  
diff --git a/src/emu/x64run.c b/src/emu/x64run.c
index 7be78a21..f9f6e14e 100644
--- a/src/emu/x64run.c
+++ b/src/emu/x64run.c
@@ -2047,12 +2047,12 @@ if(emu->segs[_CS]!=0x33 && emu->segs[_CS]!=0x23) printf_log(LOG_NONE, "Warning,
     // fork handling
     if(emu->fork) {
         addr = R_RIP;
-        if(step)
-            return 0;
         int forktype = emu->fork;
         emu->quit = 0;
         emu->fork = 0;
         emu = x64emu_fork(emu, forktype);
+        if(step)
+            return 0;
         goto x64emurun;
     }
     // setcontext handling
diff --git a/src/libtools/threads.c b/src/libtools/threads.c
index a5fe55f7..f7c2badf 100644
--- a/src/libtools/threads.c
+++ b/src/libtools/threads.c
@@ -144,13 +144,12 @@ static void emuthread_destroy(void* p)
 		return;
 	void* ptr;
 	// check tlsdata
-	if (my_context && (ptr = pthread_getspecific(my_context->tlskey)) != NULL)
-        free_tlsdatasize(ptr);
+	/*if (my_context && (ptr = pthread_getspecific(my_context->tlskey)) != NULL)
+        free_tlsdatasize(ptr);*/
 	// free x64emu
 	if(et) {
 		FreeX64Emu(&et->emu);
 		box_free(et);
-		pthread_setspecific(thread_key, NULL);
 	}
 }