In message <[email protected]>, Toll
ef Fog Heen writes:

Go for it...


>If we were panic-ing in multiple threads at the same time, the panic
>buffer would be partially overwritten.  Prevent this with a mutex
>---
> bin/varnishd/cache_panic.c  |    5 +++++
> bin/varnishd/cache_shmlog.c |    2 +-
> 2 files changed, 6 insertions(+), 1 deletions(-)
>
>diff --git a/bin/varnishd/cache_panic.c b/bin/varnishd/cache_panic.c
>index c443b67..9279029 100644
>--- a/bin/varnishd/cache_panic.c
>+++ b/bin/varnishd/cache_panic.c
>@@ -34,6 +34,7 @@
> #include <stdio.h>
> #include <stdlib.h>
> #include <unistd.h>
>+#include <pthread.h>
> 
> #ifndef HAVE_EXECINFO_H
> #include "compat/execinfo.h"
>@@ -56,6 +57,7 @@
>  */
> 
> static struct vsb vsps, *vsp;
>+pthread_mutex_t panicstr_mtx = PTHREAD_MUTEX_INITIALIZER;
> 
> /*--------------------------------------------------------------------*/
> 
>@@ -294,6 +296,9 @@ pan_ic(const char *func, const char *file, int line, const 
>char *cond,
>       const char *q;
>       const struct sess *sp;
> 
>+      AZ(pthread_mutex_lock(&panicstr_mtx)); /* Won't be released,
>+                                                we're going to die
>+                                                anyway */
>       switch(xxx) {
>       case 3:
>               VSB_printf(vsp,
>diff --git a/bin/varnishd/cache_shmlog.c b/bin/varnishd/cache_shmlog.c
>index e0b332d..023c20a 100644
>--- a/bin/varnishd/cache_shmlog.c
>+++ b/bin/varnishd/cache_shmlog.c
>@@ -288,7 +288,7 @@ VSL_Init(void)
> 
>       vsl_wrap();
>       VSM_head->starttime = (intmax_t)TIM_real();
>-      VSM_head->panicstr[0] = '\0';
>+      memset(VSM_head->panicstr, '\0', sizeof *VSM_head->panicstr);
>       memset(VSC_C_main, 0, sizeof *VSC_C_main);
>       VSM_head->child_pid = getpid();
> }
>-- 
>1.7.5.4
>
>
>_______________________________________________
>varnish-dev mailing list
>[email protected]
>https://www.varnish-cache.org/lists/mailman/listinfo/varnish-dev
>

-- 
Poul-Henning Kamp       | UNIX since Zilog Zeus 3.20
[email protected]         | TCP/IP since RFC 956
FreeBSD committer       | BSD since 4.3-tahoe    
Never attribute to malice what can adequately be explained by incompetence.

_______________________________________________
varnish-dev mailing list
[email protected]
https://www.varnish-cache.org/lists/mailman/listinfo/varnish-dev

Reply via email to