From: Willy Tarreau Date: Fri, 15 Sep 2017 07:07:56 +0000 (+0200) Subject: MEDIUM: session: take care of incrementing/decrementing jobs X-Git-Tag: v1.8-dev3~93 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6f5e4b98dfecb8852bda07420680c2028d95d0d2;p=thirdparty%2Fhaproxy.git 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. --- diff --git a/src/flt_spoe.c b/src/flt_spoe.c index 47aef57626..f27880975d 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 acf5896968..e1b7264979 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 d193b511a0..0af49b0e46 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 8fb3b78ae8..17f186769a 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 c86baff600..68a4303d68 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 e9d640016c..d8c1a7e0d1 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--;