diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2025-09-10 11:28:59 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2025-09-10 11:28:59 +0200 |
| commit | d509261f81553a6b09ea219e1dbde9775df9a63e (patch) | |
| tree | 1dcb50b1230d1eb7b742dbcb85366b859d225c99 /src/libtools/threads32.c | |
| parent | 7862e8a3d55e201d2410edc68f1abad6bc586cbd (diff) | |
| download | box64-d509261f81553a6b09ea219e1dbde9775df9a63e.tar.gz box64-d509261f81553a6b09ea219e1dbde9775df9a63e.zip | |
[BOX32] Some improvment to box32 memory managment and thread handling
Diffstat (limited to 'src/libtools/threads32.c')
| -rwxr-xr-x | src/libtools/threads32.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/libtools/threads32.c b/src/libtools/threads32.c index 318db0d2..2c36a532 100755 --- a/src/libtools/threads32.c +++ b/src/libtools/threads32.c @@ -181,6 +181,8 @@ EXPORT int my32_pthread_create(x64emu_t *emu, void* t, void* attr, void* start_r size_t attr_stacksize; int own; void* stack = NULL; + pthread_attr_t* my_attr = NULL; + pthread_attr_t actual_attr; if(attr) { size_t stsize; @@ -193,6 +195,12 @@ EXPORT int my32_pthread_create(x64emu_t *emu, void* t, void* attr, void* start_r stacksize = stsize; if(stacksize<minsize) // emu and all needs some stack space, don't go too low pthread_attr_setstacksize(get_attr(attr), minsize); + if(stacksize>1*1024*1024) + pthread_attr_setstacksize(get_attr(attr), 1*1024*1024); + } else { + my_attr = &actual_attr; + pthread_attr_init(my_attr); + pthread_attr_setstacksize(my_attr, 1*1024*1024); } if(GetStackSize((uintptr_t)attr, &attr_stack, &attr_stacksize)) { @@ -242,8 +250,10 @@ EXPORT int my32_pthread_create(x64emu_t *emu, void* t, void* attr, void* start_r } #endif // create thread - return pthread_create((pthread_t*)t, get_attr(attr), + int ret = pthread_create((pthread_t*)t, my_attr?my_attr:get_attr(attr), pthread_routine, et); + if(my_attr) pthread_attr_destroy(my_attr); + return ret; } EXPORT int my32_pthread_detach(x64emu_t* emu, pthread_t p) |