about summary refs log tree commit diff stats
path: root/src/libtools/threads32.c
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2025-09-10 11:28:59 +0200
committerptitSeb <sebastien.chev@gmail.com>2025-09-10 11:28:59 +0200
commitd509261f81553a6b09ea219e1dbde9775df9a63e (patch)
tree1dcb50b1230d1eb7b742dbcb85366b859d225c99 /src/libtools/threads32.c
parent7862e8a3d55e201d2410edc68f1abad6bc586cbd (diff)
downloadbox64-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-xsrc/libtools/threads32.c12
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)