mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-02-09 14:58:25 +00:00
BUG/MEDIUM: spoe: Be sure to create a SPOE applet if none on the current thread
When a message is queued, waiting to be processed by a SPOE applet, there are some heuristic to know if a new applet must be created or not. There are 2 conditions to skip the applet creation: 1 - if there are enough idle applets on the current thread, or, 2 - if the processing rate on the current thread is high enough to handle this new message In the 2nd case, there is a flaw when the number of processed messages falls to zero while the processing rate is still greater than zero. In that case, we will skip the SPOE applet creation without taking care to check there is at least one applet on the current thread. So now, the conditions above to skip the SPOE applet creation are only evaluated if there is at least one applet on the current thread. This patch must be backported to every stable versions.
This commit is contained in:
parent
4a2dd6f377
commit
5e84f13a0b
@ -2090,8 +2090,9 @@ spoe_queue_context(struct spoe_context *ctx)
|
||||
struct spoe_appctx *spoe_appctx;
|
||||
|
||||
/* Check if we need to create a new SPOE applet or not. */
|
||||
if (agent->rt[tid].processing < agent->rt[tid].idles ||
|
||||
agent->rt[tid].processing < read_freq_ctr(&agent->rt[tid].processing_per_sec))
|
||||
if (!LIST_ISEMPTY(&agent->rt[tid].applets) &&
|
||||
(agent->rt[tid].processing < agent->rt[tid].idles ||
|
||||
agent->rt[tid].processing < read_freq_ctr(&agent->rt[tid].processing_per_sec)))
|
||||
goto end;
|
||||
|
||||
SPOE_PRINTF(stderr, "%d.%06d [SPOE/%-15s] %s: stream=%p"
|
||||
|
Loading…
Reference in New Issue
Block a user