[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