[master] 4c7108b1b allow bgthreads to terminate only during shutdown

Nils Goroll nils.goroll at uplex.de
Tue Jan 14 13:31:06 UTC 2020


commit 4c7108b1b3a588b29b7f8e189534e132f1eb8458
Author: Nils Goroll <nils.goroll at uplex.de>
Date:   Tue Jan 14 14:16:49 2020 +0100

    allow bgthreads to terminate only during shutdown

diff --git a/bin/varnishd/cache/cache_main.c b/bin/varnishd/cache/cache_main.c
index 7ba3a0f52..d6618876d 100644
--- a/bin/varnishd/cache/cache_main.c
+++ b/bin/varnishd/cache/cache_main.c
@@ -50,6 +50,7 @@
 
 #include "hash/hash_slinger.h"
 
+int cache_shutdown = 0;
 
 volatile struct params		*cache_param;
 static pthread_mutex_t		cache_vrnd_mtx;
@@ -409,8 +410,10 @@ child_main(int sigmagic, size_t altstksz)
 
 	CLI_Run();
 
+	cache_shutdown = 1;
 	VCA_Shutdown();
 	BAN_Shutdown();
+	EXP_Shutdown();
 	STV_close();
 
 	printf("Child dies\n");
diff --git a/bin/varnishd/cache/cache_varnishd.h b/bin/varnishd/cache/cache_varnishd.h
index 7fa11d949..e96794403 100644
--- a/bin/varnishd/cache/cache_varnishd.h
+++ b/bin/varnishd/cache/cache_varnishd.h
@@ -201,6 +201,7 @@ void EXP_Rearm(struct objcore *oc, vtim_real now,
     vtim_dur ttl, vtim_dur grace, vtim_dur keep);
 
 /* From cache_main.c */
+extern int cache_shutdown;
 void BAN_Init(void);
 void BAN_Compile(void);
 void BAN_Shutdown(void);
diff --git a/bin/varnishd/cache/cache_wrk.c b/bin/varnishd/cache/cache_wrk.c
index 3fd20eee2..9b90dc10b 100644
--- a/bin/varnishd/cache/cache_wrk.c
+++ b/bin/varnishd/cache/cache_wrk.c
@@ -86,6 +86,7 @@ wrk_bgthread(void *arg)
 	struct bgthread *bt;
 	struct worker wrk;
 	struct VSC_main_wrk ds;
+	void *r;
 
 	CAST_OBJ_NOTNULL(bt, arg, BGTHREAD_MAGIC);
 	THR_SetName(bt->name);
@@ -94,11 +95,12 @@ wrk_bgthread(void *arg)
 	memset(&ds, 0, sizeof ds);
 	wrk.stats = &ds;
 
-	(void)bt->func(&wrk, bt->priv);
+	r = bt->func(&wrk, bt->priv);
 
-	WRONG("BgThread terminated");
+	if (! cache_shutdown)
+		WRONG("BgThread terminated");
 
-	NEEDLESS(return (NULL));
+	return (r);
 }
 
 void


More information about the varnish-commit mailing list