blob: b21e7c03bf2ac989f4ef9289e77deee5b6454973 [file] [log] [blame]
Patrick Williams213cb262021-08-07 19:21:33 -05001autofs-5.1.7 - use default stack size for threads
2
3From: Ian Kent <raven@themaw.net>
4
5autofs uses PTHREAD_STACK_MIN to set the stack size for threads it
6creates.
7
8In two cases it is used to reduce the stack size for long running
9service threads while it's used to allocate a larger stack for worker
10threads that can have larger memory requirements.
11
12In recent glibc releases PTHREAD_STACK_MIN is no longer a constant
13which can lead to unexpectedly different stack sizes on different
14architectures and the autofs assumption it's a constant causes a
15compile failure.
16
17The need to alter the stack size was due to observed stack overflow
18which was thought to be due the thread stack being too small for autofs
19and glibc alloca(3) usage.
20
21Quite a bit of that alloca(3) usage has been eliminated from autofs now,
22particularly those that might be allocating largish amounts of storage,
23and there has been a lot of change in glibc too so using the thread
24default stack should be ok.
25
26Signed-off-by: Ian Kent <raven@themaw.net>
27---
28 CHANGELOG | 1 +
29 daemon/automount.c | 29 -----------------------------
30 daemon/state.c | 6 +-----
31 lib/alarm.c | 6 +-----
32 4 files changed, 3 insertions(+), 39 deletions(-)
33
34--- a/daemon/automount.c
35+++ b/daemon/automount.c
36@@ -92,7 +92,6 @@ static size_t kpkt_len;
37 /* Attributes for creating detached and joinable threads */
38 pthread_attr_t th_attr;
39 pthread_attr_t th_attr_detached;
40-size_t detached_thread_stack_size = PTHREAD_STACK_MIN * 144;
41
42 struct master_readmap_cond mrc = {
43 PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER, 0, NULL, 0, 0, 0, 0};
44@@ -2617,34 +2616,6 @@ int main(int argc, char *argv[])
45 if (start_pipefd[1] != -1) {
46 res = write(start_pipefd[1], pst_stat, sizeof(*pst_stat));
47 close(start_pipefd[1]);
48- }
49- release_flag_file();
50- macro_free_global_table();
51- exit(1);
52- }
53-
54-#ifdef _POSIX_THREAD_ATTR_STACKSIZE
55- if (pthread_attr_setstacksize(
56- &th_attr_detached, detached_thread_stack_size)) {
57- logerr("%s: failed to set stack size thread attribute!",
58- program);
59- if (start_pipefd[1] != -1) {
60- res = write(start_pipefd[1], pst_stat, sizeof(*pst_stat));
61- close(start_pipefd[1]);
62- }
63- release_flag_file();
64- macro_free_global_table();
65- exit(1);
66- }
67-#endif
68-
69- if (pthread_attr_getstacksize(
70- &th_attr_detached, &detached_thread_stack_size)) {
71- logerr("%s: failed to get detached thread stack size!",
72- program);
73- if (start_pipefd[1] != -1) {
74- res = write(start_pipefd[1], pst_stat, sizeof(*pst_stat));
75- close(start_pipefd[1]);
76 }
77 release_flag_file();
78 macro_free_global_table();
79--- a/daemon/state.c
80+++ b/daemon/state.c
81@@ -1173,12 +1173,8 @@ int st_start_handler(void)
82 status = pthread_attr_init(pattrs);
83 if (status)
84 pattrs = NULL;
85- else {
86+ else
87 pthread_attr_setdetachstate(pattrs, PTHREAD_CREATE_DETACHED);
88-#ifdef _POSIX_THREAD_ATTR_STACKSIZE
89- pthread_attr_setstacksize(pattrs, PTHREAD_STACK_MIN*4);
90-#endif
91- }
92
93 status = pthread_create(&thid, pattrs, st_queue_handler, NULL);
94
95--- a/lib/alarm.c
96+++ b/lib/alarm.c
97@@ -270,12 +270,8 @@ int alarm_start_handler(void)
98 status = pthread_attr_init(pattrs);
99 if (status)
100 pattrs = NULL;
101- else {
102+ else
103 pthread_attr_setdetachstate(pattrs, PTHREAD_CREATE_DETACHED);
104-#ifdef _POSIX_THREAD_ATTR_STACKSIZE
105- pthread_attr_setstacksize(pattrs, PTHREAD_STACK_MIN*4);
106-#endif
107- }
108
109 status = pthread_condattr_init(&condattrs);
110 if (status)