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)
