[4.1] 0ef00ea set the sigaltstack for each thread - SunOS needs it
PÃ¥l Hermunn Johansen
hermunn at varnish-software.com
Wed Sep 20 12:34:05 UTC 2017
commit 0ef00ea1d6e948b4778b10f968e0b41fbb21b6d7
Author: Nils Goroll <nils.goroll at uplex.de>
Date: Mon Sep 4 19:48:26 2017 +0200
set the sigaltstack for each thread - SunOS needs it
Ref: #2396
diff --git a/bin/varnishd/cache/cache_wrk.c b/bin/varnishd/cache/cache_wrk.c
index ede1329..9ede273 100644
--- a/bin/varnishd/cache/cache_wrk.c
+++ b/bin/varnishd/cache/cache_wrk.c
@@ -41,6 +41,11 @@
#include "hash/hash_slinger.h"
+#ifdef HAVE_SIGALTSTACK
+#include <signal.h>
+extern stack_t altstack;
+#endif
+
static void Pool_Work_Thread(struct pool *pp, struct worker *wrk);
/*--------------------------------------------------------------------
@@ -398,6 +403,9 @@ pool_thread(void *priv)
struct pool_info *pi;
CAST_OBJ_NOTNULL(pi, priv, POOL_INFO_MAGIC);
+#ifdef HAVE_SIGALTSTACK
+ AZ(sigaltstack(&altstack, NULL));
+#endif
WRK_Thread(pi->qp, pi->stacksize, cache_param->workspace_thread);
FREE_OBJ(pi);
return (NULL);
diff --git a/bin/varnishd/mgt/mgt_child.c b/bin/varnishd/mgt/mgt_child.c
index 64c73fe..2477a5a 100644
--- a/bin/varnishd/mgt/mgt_child.c
+++ b/bin/varnishd/mgt/mgt_child.c
@@ -87,6 +87,10 @@ static struct vlu *child_std_vlu;
static struct vsb *child_panic = NULL;
static double mgt_uptime_t0 = 0.;
+#ifdef HAVE_SIGALTSTACK
+stack_t altstack;
+#endif
+
static void mgt_reap_child(void);
/*---------------------------------------------------------------------
@@ -396,15 +400,14 @@ mgt_launch_child(struct cli *cli)
(void)sigaction(SIGABRT, &sa, NULL);
#ifdef HAVE_SIGALTSTACK
- stack_t ss;
size_t sz = SIGSTKSZ + 4096;
if (sz < mgt_param.wthread_stacksize)
sz = mgt_param.wthread_stacksize;
- ss.ss_sp = malloc(sz);
- AN(ss.ss_sp);
- ss.ss_size = sz;
- ss.ss_flags = 0;
- AZ(sigaltstack(&ss, NULL));
+ altstack.ss_sp = malloc(sz);
+ AN(altstack.ss_sp);
+ altstack.ss_size = sz;
+ altstack.ss_flags = 0;
+ AZ(sigaltstack(&altstack, NULL));
sa.sa_flags |= SA_ONSTACK;
#endif
(void)sigaction(SIGSEGV, &sa, NULL);
More information about the varnish-commit
mailing list