mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-08 08:07:10 +02:00
MINOR: stream: don't prune variables if the list is empty
The vars_prune() and vars_init() functions involve locking while most of the time there is no variable at all in streams nor sessions. Let's check for emptiness before calling these functions. Simply doing this has increased the multithreaded performance from 1.5 to 5% depending on the workload.
This commit is contained in:
parent
80512b186f
commit
cda7f3f5c2
@ -7566,8 +7566,10 @@ void http_end_txn(struct stream *s)
|
||||
memset(s->res_cap, 0, fe->nb_rsp_cap * sizeof(void *));
|
||||
}
|
||||
|
||||
vars_prune(&s->vars_txn, s->sess, s);
|
||||
vars_prune(&s->vars_reqres, s->sess, s);
|
||||
if (!LIST_ISEMPTY(&s->vars_txn.head))
|
||||
vars_prune(&s->vars_txn, s->sess, s);
|
||||
if (!LIST_ISEMPTY(&s->vars_reqres.head))
|
||||
vars_prune(&s->vars_reqres, s->sess, s);
|
||||
}
|
||||
|
||||
/* to be used at the end of a transaction to prepare a new one */
|
||||
|
12
src/stream.c
12
src/stream.c
@ -376,8 +376,10 @@ static void stream_free(struct stream *s)
|
||||
}
|
||||
|
||||
/* Cleanup all variable contexts. */
|
||||
vars_prune(&s->vars_txn, s->sess, s);
|
||||
vars_prune(&s->vars_reqres, s->sess, s);
|
||||
if (!LIST_ISEMPTY(&s->vars_txn.head))
|
||||
vars_prune(&s->vars_txn, s->sess, s);
|
||||
if (!LIST_ISEMPTY(&s->vars_reqres.head))
|
||||
vars_prune(&s->vars_reqres, s->sess, s);
|
||||
|
||||
stream_store_counters(s);
|
||||
|
||||
@ -2258,8 +2260,10 @@ struct task *process_stream(struct task *t, void *context, unsigned short state)
|
||||
|
||||
/* prune the request variables and swap to the response variables. */
|
||||
if (s->vars_reqres.scope != SCOPE_RES) {
|
||||
vars_prune(&s->vars_reqres, s->sess, s);
|
||||
vars_init(&s->vars_reqres, SCOPE_RES);
|
||||
if (!LIST_ISEMPTY(&s->vars_reqres.head)) {
|
||||
vars_prune(&s->vars_reqres, s->sess, s);
|
||||
vars_init(&s->vars_reqres, SCOPE_RES);
|
||||
}
|
||||
}
|
||||
|
||||
do {
|
||||
|
Loading…
Reference in New Issue
Block a user