[master] 2bd5d2adf Make threads_limited counter accurate
Nils Goroll
nils.goroll at uplex.de
Sun Feb 21 11:59:08 UTC 2021
commit 2bd5d2adfc407216ebaa653fae882d3c8d47f5e1
Author: Nils Goroll <nils.goroll at uplex.de>
Date: Sun Feb 21 12:41:49 2021 +0100
Make threads_limited counter accurate
In pool_herder(), we do as much work as possible outside the pool
mutex. In particular, we check if we need to breed more threads, then
we do more checks, and finally we aquire the lock and either go sleep
or increase the threads_limited counter if, at that point, lqueue is
non-zero.
Yet it could have increased since we last checked, and there is
nothing wrong with that, we will breed a new thread in the next
iteration of the loop.
Increase threads_limited only if we would not bread a new thread right
away.
Fixes #3531
diff --git a/bin/varnishd/cache/cache_wrk.c b/bin/varnishd/cache/cache_wrk.c
index 9b6933cae..bd89940b7 100644
--- a/bin/varnishd/cache/cache_wrk.c
+++ b/bin/varnishd/cache/cache_wrk.c
@@ -681,7 +681,7 @@ pool_herder(void *priv)
delay = 0.5;
(void)Lck_CondWait(&pp->herder_cond, &pp->mtx,
VTIM_real() + delay);
- } else
+ } else if (pp->nthr >= cache_param->wthread_max)
/* XXX: unsafe counters */
VSC_C_main->threads_limited++;
Lck_Unlock(&pp->mtx);
More information about the varnish-commit
mailing list