aboutsummaryrefslogtreecommitdiffstats
path: root/meta-networking/recipes-daemons/autofs/autofs/autofs-5.1.7-use-default-stack-size-for-threads.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-networking/recipes-daemons/autofs/autofs/autofs-5.1.7-use-default-stack-size-for-threads.patch')
-rw-r--r--meta-networking/recipes-daemons/autofs/autofs/autofs-5.1.7-use-default-stack-size-for-threads.patch110
1 files changed, 110 insertions, 0 deletions
diff --git a/meta-networking/recipes-daemons/autofs/autofs/autofs-5.1.7-use-default-stack-size-for-threads.patch b/meta-networking/recipes-daemons/autofs/autofs/autofs-5.1.7-use-default-stack-size-for-threads.patch
new file mode 100644
index 0000000000..b21e7c03bf
--- /dev/null
+++ b/meta-networking/recipes-daemons/autofs/autofs/autofs-5.1.7-use-default-stack-size-for-threads.patch
@@ -0,0 +1,110 @@
+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)