<div dir="ltr">Why not return earlier in VUT_Signaled if vut is NULL rather than checking in every handler?</div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, May 2, 2018 at 9:49 AM, Dridi Boukelmoune <span dir="ltr"><<a href="mailto:dridi.boukelmoune@gmail.com" target="_blank">dridi.boukelmoune@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
commit d0a2ec9e75f4e09d9d40c057d34f66<wbr>c548766c81<br>
Author: Dridi Boukelmoune <<a href="mailto:dridi.boukelmoune@gmail.com">dridi.boukelmoune@gmail.com</a>><br>
Date:   Wed May 2 10:37:24 2018 +0200<br>
<br>
    Only handle signals if we still have a VUT<br>
<br>
    This can happen if a signal is caught after `VUT_Fini` was called, but<br>
    at this point we should no longer manipulate the VUT being dismantled.<br>
<br>
    Original test case by Geoff, slightly modified.<br>
<br>
    Closes #2650<br>
<br>
diff --git a/bin/varnishhist/varnishhist.<wbr>c b/bin/varnishhist/varnishhist.<wbr>c<br>
index b33f5ce..5d32d6a 100644<br>
--- a/bin/varnishhist/varnishhist.<wbr>c<br>
+++ b/bin/varnishhist/varnishhist.<wbr>c<br>
@@ -494,7 +494,9 @@ profile_error(const char *s)<br>
 static void<br>
 vut_sighandler(int sig)<br>
 {<br>
-       VUT_Signaled(vut, sig);<br>
+<br>
+       if (vut != NULL)<br>
+               VUT_Signaled(vut, sig);<br>
 }<br>
<br>
 int<br>
diff --git a/bin/varnishlog/varnishlog.c b/bin/varnishlog/varnishlog.c<br>
index b714f54..d80986b 100644<br>
--- a/bin/varnishlog/varnishlog.c<br>
+++ b/bin/varnishlog/varnishlog.c<br>
@@ -124,8 +124,9 @@ sighup(struct VUT *v)<br>
 static void<br>
 vut_sighandler(int sig)<br>
 {<br>
-       CHECK_OBJ_NOTNULL(vut, VUT_MAGIC);<br>
-       VUT_Signaled(vut, sig);<br>
+<br>
+       if (vut != NULL)<br>
+               VUT_Signaled(vut, sig);<br>
 }<br>
<br>
 int<br>
diff --git a/bin/varnishncsa/varnishncsa.<wbr>c b/bin/varnishncsa/varnishncsa.<wbr>c<br>
index cd3f5a0..488027d 100644<br>
--- a/bin/varnishncsa/varnishncsa.<wbr>c<br>
+++ b/bin/varnishncsa/varnishncsa.<wbr>c<br>
@@ -1124,8 +1124,9 @@ sighup(struct VUT *v)<br>
 static void<br>
 vut_sighandler(int sig)<br>
 {<br>
-       CHECK_OBJ_NOTNULL(vut, VUT_MAGIC);<br>
-       VUT_Signaled(vut, sig);<br>
+<br>
+       if (vut != NULL)<br>
+               VUT_Signaled(vut, sig);<br>
 }<br>
<br>
 static char *<br>
diff --git a/bin/varnishtest/tests/<wbr>r02649.vtc b/bin/varnishtest/tests/<wbr>r02649.vtc<br>
new file mode 100644<br>
index 0000000..e8737b4<br>
--- /dev/null<br>
+++ b/bin/varnishtest/tests/<wbr>r02649.vtc<br>
@@ -0,0 +1,18 @@<br>
+varnishtest "Cleanly stop a VUT app via vtc process -stop"<br>
+<br>
+varnish v1 -vcl {<br>
+       backend be {<br>
+               .host = "${bad_backend}";<br>
+       }<br>
+} -start<br>
+<br>
+process p1 {<br>
+       exec varnishncsa -n ${v1_name} -P ${tmpdir}/ncsa.pid -w ${tmpdir}/ncsa.log<br>
+} -start<br>
+<br>
+delay 1<br>
+<br>
+process p1 -expect-exit 0 -stop -wait<br>
+<br>
+# Expect empty stderr output<br>
+shell -match {^0\b} "wc -c ${tmpdir}/p1/stderr"<br>
diff --git a/bin/varnishtop/varnishtop.c b/bin/varnishtop/varnishtop.c<br>
index 61f0e4d..5f030c9 100644<br>
--- a/bin/varnishtop/varnishtop.c<br>
+++ b/bin/varnishtop/varnishtop.c<br>
@@ -195,8 +195,9 @@ sighup(struct VUT *v)<br>
 static void<br>
 vut_sighandler(int sig)<br>
 {<br>
-       CHECK_OBJ_NOTNULL(vut, VUT_MAGIC);<br>
-       VUT_Signaled(vut, sig);<br>
+<br>
+       if (vut != NULL)<br>
+               VUT_Signaled(vut, sig);<br>
 }<br>
<br>
 static void<br>
______________________________<wbr>_________________<br>
varnish-commit mailing list<br>
<a href="mailto:varnish-commit@varnish-cache.org">varnish-commit@varnish-cache.<wbr>org</a><br>
<a href="https://www.varnish-cache.org/lists/mailman/listinfo/varnish-commit" rel="noreferrer" target="_blank">https://www.varnish-cache.org/<wbr>lists/mailman/listinfo/<wbr>varnish-commit</a><br>
</blockquote></div><br></div>