autofs-5.1.7 - use default stack size for threads 
 | 
  
 | 
From: Ian Kent <raven@themaw.net> 
 | 
  
 | 
autofs uses PTHREAD_STACK_MIN to set the stack size for threads it 
 | 
creates. 
 | 
  
 | 
In two cases it is used to reduce the stack size for long running 
 | 
service threads while it's used to allocate a larger stack for worker 
 | 
threads that can have larger memory requirements. 
 | 
  
 | 
In recent glibc releases PTHREAD_STACK_MIN is no longer a constant 
 | 
which can lead to unexpectedly different stack sizes on different 
 | 
architectures and the autofs assumption it's a constant causes a 
 | 
compile failure. 
 | 
  
 | 
The need to alter the stack size was due to observed stack overflow 
 | 
which was thought to be due the thread stack being too small for autofs 
 | 
and glibc alloca(3) usage. 
 | 
  
 | 
Quite a bit of that alloca(3) usage has been eliminated from autofs now, 
 | 
particularly those that might be allocating largish amounts of storage, 
 | 
and there has been a lot of change in glibc too so using the thread 
 | 
default stack should be ok. 
 | 
  
 | 
Signed-off-by: Ian Kent <raven@themaw.net> 
 | 
--- 
 | 
 CHANGELOG          |    1 + 
 | 
 daemon/automount.c |   29 ----------------------------- 
 | 
 daemon/state.c     |    6 +----- 
 | 
 lib/alarm.c        |    6 +----- 
 | 
 4 files changed, 3 insertions(+), 39 deletions(-) 
 | 
  
 | 
--- a/daemon/automount.c 
 | 
+++ b/daemon/automount.c 
 | 
@@ -92,7 +92,6 @@ static size_t kpkt_len; 
 | 
 /* Attributes for creating detached and joinable threads */ 
 | 
 pthread_attr_t th_attr; 
 | 
 pthread_attr_t th_attr_detached; 
 | 
-size_t detached_thread_stack_size = PTHREAD_STACK_MIN * 144; 
 | 
  
 | 
 struct master_readmap_cond mrc = { 
 | 
     PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER, 0, NULL, 0, 0, 0, 0}; 
 | 
@@ -2617,34 +2616,6 @@ int main(int argc, char *argv[]) 
 | 
         if (start_pipefd[1] != -1) { 
 | 
             res = write(start_pipefd[1], pst_stat, sizeof(*pst_stat)); 
 | 
             close(start_pipefd[1]); 
 | 
-        } 
 | 
-        release_flag_file(); 
 | 
-        macro_free_global_table(); 
 | 
-        exit(1); 
 | 
-    } 
 | 
- 
 | 
-#ifdef _POSIX_THREAD_ATTR_STACKSIZE 
 | 
-    if (pthread_attr_setstacksize( 
 | 
-            &th_attr_detached, detached_thread_stack_size)) { 
 | 
-        logerr("%s: failed to set stack size thread attribute!", 
 | 
-               program); 
 | 
-        if (start_pipefd[1] != -1) { 
 | 
-            res = write(start_pipefd[1], pst_stat, sizeof(*pst_stat)); 
 | 
-            close(start_pipefd[1]); 
 | 
-        } 
 | 
-        release_flag_file(); 
 | 
-        macro_free_global_table(); 
 | 
-        exit(1); 
 | 
-    } 
 | 
-#endif 
 | 
- 
 | 
-    if (pthread_attr_getstacksize( 
 | 
-            &th_attr_detached, &detached_thread_stack_size)) { 
 | 
-        logerr("%s: failed to get detached thread stack size!", 
 | 
-               program); 
 | 
-        if (start_pipefd[1] != -1) { 
 | 
-            res = write(start_pipefd[1], pst_stat, sizeof(*pst_stat)); 
 | 
-            close(start_pipefd[1]); 
 | 
         } 
 | 
         release_flag_file(); 
 | 
         macro_free_global_table(); 
 | 
--- a/daemon/state.c 
 | 
+++ b/daemon/state.c 
 | 
@@ -1173,12 +1173,8 @@ int st_start_handler(void) 
 | 
     status = pthread_attr_init(pattrs); 
 | 
     if (status) 
 | 
         pattrs = NULL; 
 | 
-    else { 
 | 
+    else 
 | 
         pthread_attr_setdetachstate(pattrs, PTHREAD_CREATE_DETACHED); 
 | 
-#ifdef _POSIX_THREAD_ATTR_STACKSIZE 
 | 
-        pthread_attr_setstacksize(pattrs, PTHREAD_STACK_MIN*4); 
 | 
-#endif 
 | 
-    } 
 | 
  
 | 
     status = pthread_create(&thid, pattrs, st_queue_handler, NULL); 
 | 
  
 | 
--- a/lib/alarm.c 
 | 
+++ b/lib/alarm.c 
 | 
@@ -270,12 +270,8 @@ int alarm_start_handler(void) 
 | 
     status = pthread_attr_init(pattrs); 
 | 
     if (status) 
 | 
         pattrs = NULL; 
 | 
-    else { 
 | 
+    else 
 | 
         pthread_attr_setdetachstate(pattrs, PTHREAD_CREATE_DETACHED); 
 | 
-#ifdef _POSIX_THREAD_ATTR_STACKSIZE 
 | 
-        pthread_attr_setstacksize(pattrs, PTHREAD_STACK_MIN*4); 
 | 
-#endif 
 | 
-    } 
 | 
  
 | 
     status = pthread_condattr_init(&condattrs); 
 | 
     if (status) 
 |