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
parent d2be2bfc
......@@ -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);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment