[master] 82ae65f Move the sigsegv stuff to its own function

Poul-Henning Kamp phk at FreeBSD.org
Sat Oct 21 22:07:11 UTC 2017


commit 82ae65f8714c52364a630d3f1a909d00aba69fcf
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Sat Oct 21 21:23:25 2017 +0000

    Move the sigsegv stuff to its own function

diff --git a/bin/varnishd/mgt/mgt_child.c b/bin/varnishd/mgt/mgt_child.c
index 1c1c41b..a8e148d 100644
--- a/bin/varnishd/mgt/mgt_child.c
+++ b/bin/varnishd/mgt/mgt_child.c
@@ -293,6 +293,39 @@ child_signal_handler(int s, siginfo_t *si, void *c)
  */
 
 static void
+mgt_child_sigmagic(void)
+{
+	struct sigaction sa;
+
+	memset(&sa, 0, sizeof sa);
+	sa.sa_sigaction = child_signal_handler;
+	sa.sa_flags = SA_SIGINFO;
+	(void)sigaction(SIGBUS, &sa, NULL);
+	(void)sigaction(SIGABRT, &sa, NULL);
+
+#ifdef HAVE_SIGALTSTACK
+	size_t sz = SIGSTKSZ + 4096;
+	if (sz < mgt_param.wthread_stacksize)
+		sz = mgt_param.wthread_stacksize;
+	altstack.ss_sp = mmap(NULL, sz,  PROT_READ | PROT_WRITE,
+			      MAP_PRIVATE | MAP_ANONYMOUS,
+			      -1, 0);
+	AN(altstack.ss_sp != MAP_FAILED);
+	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);
+}
+
+
+/*=====================================================================
+ * Launch the child process
+ */
+
+static void
 mgt_launch_child(struct cli *cli)
 {
 	pid_t pid;
@@ -300,7 +333,6 @@ mgt_launch_child(struct cli *cli)
 	char *p;
 	struct vev *e;
 	int i, cp[2];
-	struct sigaction sa;
 
 	if (child_state != CH_STOPPED && child_state != CH_DIED)
 		return;
@@ -367,30 +399,8 @@ mgt_launch_child(struct cli *cli)
 		heritage.cls = mgt_cls;
 		heritage.ident = VSB_data(vident) + 1;
 
-		if (mgt_param.sigsegv_handler) {
-			memset(&sa, 0, sizeof sa);
-			sa.sa_sigaction = child_signal_handler;
-			sa.sa_flags = SA_SIGINFO;
-			(void)sigaction(SIGBUS, &sa, NULL);
-			(void)sigaction(SIGABRT, &sa, NULL);
-
-#ifdef HAVE_SIGALTSTACK
-			size_t sz = SIGSTKSZ + 4096;
-			if (sz < mgt_param.wthread_stacksize)
-				sz = mgt_param.wthread_stacksize;
-			altstack.ss_sp = mmap(NULL, sz,  PROT_READ | PROT_WRITE,
-					      MAP_PRIVATE | MAP_ANONYMOUS,
-					      -1, 0);
-			AN(altstack.ss_sp != MAP_FAILED);
-			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);
-
-		}
+		if (mgt_param.sigsegv_handler)
+			mgt_child_sigmagic();
 		(void)signal(SIGINT, SIG_DFL);
 		(void)signal(SIGTERM, SIG_DFL);
 


More information about the varnish-commit mailing list