[master] 6e6e7e7 set the sigaltstack for each thread - SunOS needs it

Nils Goroll nils.goroll at uplex.de
Mon Sep 4 20:01:06 CEST 2017


commit 6e6e7e738d991ba5baf4d39b9b9f22836215622b
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 41d2849..cf2948b 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);
 
 /*--------------------------------------------------------------------
@@ -401,6 +406,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 2952a81..76103e2 100644
--- a/bin/varnishd/mgt/mgt_child.c
+++ b/bin/varnishd/mgt/mgt_child.c
@@ -84,6 +84,10 @@ static struct vlu	*child_std_vlu;
 
 static struct vsb *child_panic = NULL;
 
+#ifdef HAVE_SIGALTSTACK
+stack_t altstack;
+#endif
+
 static void mgt_reap_child(void);
 
 /*=====================================================================
@@ -365,15 +369,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