[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[patch] fix running growisofs on thread stack fatty systems



Some systems (like PowerPC) cannot work with 64k thread stacks.  Setting the 
stack lower will error and the whole process aborts.  An example error:
$ growisofs -dvd-compat -Z /dev/hda=my.iso
Executing 'builtin_dd if=my.iso of=/dev/hda obs=32k seek=0'
:-( failed to create thread: Input/output error

So if the minimum required size is larger than 64k, we'll just use whatever 
the system defines.  If it is smaller, we'll stick with 64k.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>

--- dvd+rw-tools-7.0/mp.h
+++ dvd+rw-tools-7.0/mp.h
@@ -31,6 +31,16 @@
 #include <sched.h>
 #include <semaphore.h>
 #include <stdlib.h>
+#include <limits.h>
+
+/* some systems (like powerpc) cannot work with 64k stacks */
+#define MY_STACK_SIZE 64*1024
+#ifdef PTHREAD_STACK_MIN
+# if MY_STACK_SIZE < PTHREAD_STACK_MIN
+#  undef MY_STACK_SIZE
+#  define MY_STACK_SIZE PTHREAD_STACK_MIN
+# endif
+#endif
 
 #define THR_TYPE int
 
@@ -39,7 +49,7 @@
   pthread_attr_t attr;
 
     if (pthread_attr_init(&attr)==0 &&
-	pthread_attr_setstacksize(&attr,64*1024)==0 &&
+	pthread_attr_setstacksize(&attr,MY_STACK_SIZE)==0 &&
 	pthread_attr_setscope(&attr,PTHREAD_SCOPE_SYSTEM)==0 &&
 	pthread_create(&h,&attr,(void *(*)(void *))func,arg)==0 )
 	return (void *)h;

Attachment: signature.asc
Description: This is a digitally signed message part.


Reply to: