aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIan Kent <raven@themaw.net>2021-07-26 13:18:38 +0800
committerIan Kent <raven@themaw.net>2021-08-31 10:11:15 +0800
commit91edcc55c681dac41d2213b498ec6450aee22d9f (patch)
treeb3c8f524e1bb35524fd1cfac3d6262f2a284b276
parent7f711c687d41e86578b50fa3852a26b5e26e4088 (diff)
downloadautofs-91edcc55c681dac41d2213b498ec6450aee22d9f.tar.gz
autofs-5.1.7 - use default stack size for threads
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>
-rw-r--r--CHANGELOG1
-rw-r--r--daemon/automount.c29
-rw-r--r--daemon/state.c6
-rwxr-xr-xlib/alarm.c6
4 files changed, 3 insertions, 39 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 2b7cfaa0..61f3547a 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -80,6 +80,7 @@
- fix nonstrict offset mount fail handling.
- fix concat_options() error handling.
- eliminate some more alloca usage.
+- use default stack size for threads.
25/01/2021 autofs-5.1.7
- make bind mounts propagation slave by default.
diff --git a/daemon/automount.c b/daemon/automount.c
index 23235a7d..d7432350 100644
--- a/daemon/automount.c
+++ b/daemon/automount.c
@@ -84,7 +84,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};
@@ -2620,34 +2619,6 @@ int main(int argc, char *argv[])
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();
- exit(1);
- }
-
info(logging, "Starting automounter version %s, master map %s",
version, master_list->name);
info(logging, "using kernel protocol version %d.%02d",
diff --git a/daemon/state.c b/daemon/state.c
index 5156bb21..5df05619 100644
--- a/daemon/state.c
+++ b/daemon/state.c
@@ -1177,12 +1177,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);
diff --git a/lib/alarm.c b/lib/alarm.c
index f27e13c4..1631a9bc 100755
--- 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)