[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