about summary refs log tree commit diff stats
path: root/src/libtools
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-09-24 16:49:52 +0200
committerptitSeb <sebastien.chev@gmail.com>2024-09-24 16:49:52 +0200
commitbddeac4b456ad4707beb469ddee1652d53b97f59 (patch)
treed52f2154330f5d21e09c1c037865f9c155c6d1ac /src/libtools
parent1aa42a6779310b74ad1a6a0a95b5e3fd2ed1e817 (diff)
downloadbox64-bddeac4b456ad4707beb469ddee1652d53b97f59.tar.gz
box64-bddeac4b456ad4707beb469ddee1652d53b97f59.zip
[BOX32] Silently enlarge thread stack size that are too small for platform
Diffstat (limited to 'src/libtools')
-rwxr-xr-xsrc/libtools/threads32.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/libtools/threads32.c b/src/libtools/threads32.c
index 4d2f8cfb..cd365827 100755
--- a/src/libtools/threads32.c
+++ b/src/libtools/threads32.c
@@ -596,18 +596,18 @@ EXPORT int my32_pthread_mutexattr_setkind_np(x64emu_t* emu, void* t, int kind)
     return pthread_mutexattr_settype(t, kind);
 }
 
-// pthread_attr_t on x64 is 36 bytes
+// pthread_attr_t on x86 is 36 bytes
 static uint64_t ATTR_SIGN = 0xA055E10CDE98LL;	// random signature
-typedef struct my32_x64_attr_s {
+typedef struct my32_x86_attr_s {
 	uint64_t		sign;
 	pthread_attr_t*	attr;
-} my32_x64_attr_t;
+} my32_x86_attr_t;
 
 static pthread_attr_t* get_attr(void* attr)
 {
 	if(!attr)
 		return NULL;
-	my32_x64_attr_t* my32_attr = (my32_x64_attr_t*)attr;
+	my32_x86_attr_t* my32_attr = (my32_x86_attr_t*)attr;
 	if(my32_attr->sign!=ATTR_SIGN) {
 		my32_attr->attr = (pthread_attr_t*)box_calloc(1, sizeof(pthread_attr_t));
 		my32_attr->sign = ATTR_SIGN;
@@ -618,7 +618,7 @@ static void del_attr(void* attr)
 {
 	if(!attr)
 		return;
-	my32_x64_attr_t* my32_attr = (my32_x64_attr_t*)attr;
+	my32_x86_attr_t* my32_attr = (my32_x86_attr_t*)attr;
 	if(my32_attr->sign==ATTR_SIGN) {
 		my32_attr->sign = 0;
 		box_free(my32_attr->attr);
@@ -714,6 +714,9 @@ EXPORT int my32_pthread_attr_setstackaddr(x64emu_t* emu, void* attr, void* p)
 }
 EXPORT int my32_pthread_attr_setstacksize(x64emu_t* emu, void* attr, size_t p)
 {
+	// PTHREAD_STACK_MIN on x86 might be lower than the current platform...
+	if(p>=65536 && p<PTHREAD_STACK_MIN && !(p&4095))
+		p = PTHREAD_STACK_MIN;
 	return pthread_attr_setstacksize(get_attr(attr), p);
 }