check for sysconf (_SC_THREAD_STACK_MIN), which returns the minimal stack
authorSebastian Wilhelmi <wilhelmi@ira.uka.de>
Tue, 22 Feb 2000 13:11:24 +0000 (13:11 +0000)
committerSebastian Wilhelmi <wilhelmi@src.gnome.org>
Tue, 22 Feb 2000 13:11:24 +0000 (13:11 +0000)
2000-02-22  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

* gthread-posix.c, gthread-solaris.c: check for sysconf
(_SC_THREAD_STACK_MIN), which returns the minimal stack size for
new threads. Patch from Soeren Sandmann <sandmann@daimi.au.dk>.

gthread/ChangeLog
gthread/gthread-impl.c
gthread/gthread-posix.c
gthread/gthread-solaris.c

index b0d99da..1a6740d 100644 (file)
@@ -1,3 +1,9 @@
+2000-02-22  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
+
+       * gthread-posix.c, gthread-solaris.c: check for sysconf
+       (_SC_THREAD_STACK_MIN), which returns the minimal stack size for
+       new threads. Patch from Soeren Sandmann <sandmann@daimi.au.dk>.
+
 1999-11-16  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>
 
        * gthread-posix.c, gthread-solaris.c: Changed the prototype of
index f353c46..2704837 100644 (file)
@@ -103,8 +103,8 @@ g_thread_init (GThreadFunctions* init)
     }
 
   /* now do any initialization stuff required by the implementation,
-     but only if called with a NULL argument, of course. Otherwise it's
-     up to the user to do do. */
+   * but only if called with a NULL argument, of course. Otherwise
+   * it's up to the user to do so. */
 
 #ifdef HAVE_G_THREAD_IMPL_INIT
   if (g_thread_use_default_impl)
index b785a71..e68ebbf 100644 (file)
@@ -37,6 +37,9 @@
 #ifdef HAVE_SYS_TIME_H
 #include <sys/time.h>
 #endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
 
 #define posix_print_error( name, num )                          \
   g_error( "file %s: line %d (%s): error %s during %s",         \
 # error This should not happen. Contact the GLib team.
 #endif
 
+gulong g_thread_min_stack_size = 0;
+
 #define HAVE_G_THREAD_IMPL_INIT
 static void 
 g_thread_impl_init()
 {
   g_thread_min_priority = POSIX_MIN_PRIORITY;
   g_thread_max_priority = POSIX_MAX_PRIORITY;
+#ifdef _SC_THREAD_STACK_MIN
+  g_thread_min_stack_size = MAX (sysconf (_SC_THREAD_STACK_MIN), 0);
+#endif /* _SC_THREAD_STACK_MIN */
 }
 
 static GMutex *
@@ -228,7 +236,10 @@ g_thread_create_posix_impl (GThreadFunc thread_func,
   
 #ifdef HAVE_PTHREAD_ATTR_SETSTACKSIZE
   if (stack_size)
+    {
+      stack_size = MAX (g_thread_min_stack_size, stack_size);
       posix_check_for_error (pthread_attr_setstacksize (&attr, stack_size));
+    }
 #endif /* HAVE_PTHREAD_ATTR_SETSTACKSIZE */
 
 #ifdef PTHREAD_SCOPE_SYSTEM
index 43a38ed..4de8180 100644 (file)
@@ -35,6 +35,9 @@
 #include <errno.h>
 #include <stdlib.h>
 #include <stdio.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
 
 #define solaris_print_error( name, num )                        \
   g_error( "file %s: line %d (%s): error %s during %s",         \
   if( error ) { solaris_print_error( what, error ); }           \
   }G_STMT_END
 
+gulong g_thread_min_stack_size = 0;
+
 #define HAVE_G_THREAD_IMPL_INIT
 static void 
 g_thread_impl_init()
 {
   g_thread_min_priority = 0;
   g_thread_max_priority = 127;
+#ifdef _SC_THREAD_STACK_MIN
+  g_thread_min_stack_size = MAX (sysconf (_SC_THREAD_STACK_MIN), 0);
+#endif /* _SC_THREAD_STACK_MIN */
 }
 
 static GMutex *
@@ -193,6 +201,8 @@ g_thread_create_solaris_impl (GThreadFunc thread_func,
   
   g_return_if_fail (thread_func);
   
+  stack_size = MAX (g_thread_min_stack_size, stack_size);
+  
   solaris_check_for_error (thr_create (NULL, stack_size,  
                                       (void* (*)(void*))thread_func,
                                       arg, flags, thread));