From 6f5e4b98dfecb8852bda07420680c2028d95d0d2 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Fri, 15 Sep 2017 09:07:56 +0200 Subject: [PATCH] MEDIUM: session: take care of incrementing/decrementing jobs Each user of a session increments/decrements the jobs variable at its own place, resulting in a real mess and inconsistencies between them. Let's have session_new() increment jobs and session_free() decrement it. --- src/flt_spoe.c | 1 - src/hlua.c | 1 - src/listener.c | 2 -- src/peers.c | 1 - src/session.c | 3 ++- src/stream.c | 2 +- 6 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/flt_spoe.c b/src/flt_spoe.c index 47aef5762..f27880975 100644 --- a/src/flt_spoe.c +++ b/src/flt_spoe.c @@ -1949,7 +1949,6 @@ spoe_create_appctx(struct spoe_config *conf) strm->res.flags |= CF_READ_DONTWAIT; conf->agent_fe.feconn++; - jobs++; totalconn++; task_wakeup(SPOE_APPCTX(appctx)->task, TASK_WOKEN_INIT); diff --git a/src/hlua.c b/src/hlua.c index acf589696..e1b726497 100644 --- a/src/hlua.c +++ b/src/hlua.c @@ -2415,7 +2415,6 @@ __LJMP static int hlua_socket_new(lua_State *L) /* Update statistics counters. */ socket_proxy.feconn++; /* beconn will be increased later */ - jobs++; totalconn++; task_wakeup(strm->task, TASK_WOKEN_INIT); diff --git a/src/listener.c b/src/listener.c index d193b511a..0af49b0e4 100644 --- a/src/listener.c +++ b/src/listener.c @@ -527,7 +527,6 @@ void listener_accept(int fd) actconn++; } - jobs++; totalconn++; l->nbconn++; @@ -545,7 +544,6 @@ void listener_accept(int fd) */ if (!(l->options & LI_O_UNLIMITED)) actconn--; - jobs--; l->nbconn--; if (ret == 0) /* successful termination */ continue; diff --git a/src/peers.c b/src/peers.c index 8fb3b78ae..17f186769 100644 --- a/src/peers.c +++ b/src/peers.c @@ -1836,7 +1836,6 @@ static struct appctx *peer_session_create(struct peers *peers, struct peer *peer s->res.flags |= CF_READ_DONTWAIT; p->feconn++;/* beconn will be increased later */ - jobs++; totalconn++; peer->appctx = appctx; diff --git a/src/session.c b/src/session.c index c86baff60..68a4303d6 100644 --- a/src/session.c +++ b/src/session.c @@ -53,6 +53,7 @@ struct session *session_new(struct proxy *fe, struct listener *li, enum obj_type memset(sess->stkctr, 0, sizeof(sess->stkctr)); vars_init(&sess->vars, SCOPE_SESS); sess->task = NULL; + jobs++; } return sess; } @@ -64,6 +65,7 @@ void session_free(struct session *sess) session_store_counters(sess); vars_prune_per_sess(&sess->vars); pool_free2(pool2_session, sess); + jobs--; } /* perform minimal intializations, report 0 in case of error, 1 if OK. */ @@ -377,7 +379,6 @@ static void session_kill_embryonic(struct session *sess) if (!(sess->listener->options & LI_O_UNLIMITED)) actconn--; - jobs--; sess->listener->nbconn--; if (sess->listener->state == LI_FULL) resume_listener(sess->listener); diff --git a/src/stream.c b/src/stream.c index e9d640016..d8c1a7e0d 100644 --- a/src/stream.c +++ b/src/stream.c @@ -2420,7 +2420,7 @@ struct task *process_stream(struct task *t) sess->fe->feconn--; if (s->flags & SF_BE_ASSIGNED) s->be->beconn--; - jobs--; + if (sess->listener) { if (!(sess->listener->options & LI_O_UNLIMITED)) actconn--;