diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-10-17 17:29:32 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-10-17 17:29:32 +0200 |
| commit | 5493ab345ac2af9ac3a3ef0bfd321eaf3910460c (patch) | |
| tree | 43bd5139f78da43c0937c59c8ecaaf491bf5890f /src | |
| parent | 2589f7db14f7739f58c2e2c9634799c629307a15 (diff) | |
| download | box64-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.c | 2 | ||||
| -rw-r--r-- | src/emu/x64int3.c | 6 | ||||
| -rw-r--r-- | src/emu/x64run.c | 4 | ||||
| -rw-r--r-- | src/libtools/threads.c | 5 |
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); } } |