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.
This commit is contained in:
Willy Tarreau 2017-09-15 09:07:56 +02:00
parent 2cc5bae0b8
commit 6f5e4b98df
6 changed files with 3 additions and 7 deletions

View File

@ -1949,7 +1949,6 @@ spoe_create_appctx(struct spoe_config *conf)
strm->res.flags |= CF_READ_DONTWAIT; strm->res.flags |= CF_READ_DONTWAIT;
conf->agent_fe.feconn++; conf->agent_fe.feconn++;
jobs++;
totalconn++; totalconn++;
task_wakeup(SPOE_APPCTX(appctx)->task, TASK_WOKEN_INIT); task_wakeup(SPOE_APPCTX(appctx)->task, TASK_WOKEN_INIT);

View File

@ -2415,7 +2415,6 @@ __LJMP static int hlua_socket_new(lua_State *L)
/* Update statistics counters. */ /* Update statistics counters. */
socket_proxy.feconn++; /* beconn will be increased later */ socket_proxy.feconn++; /* beconn will be increased later */
jobs++;
totalconn++; totalconn++;
task_wakeup(strm->task, TASK_WOKEN_INIT); task_wakeup(strm->task, TASK_WOKEN_INIT);

View File

@ -527,7 +527,6 @@ void listener_accept(int fd)
actconn++; actconn++;
} }
jobs++;
totalconn++; totalconn++;
l->nbconn++; l->nbconn++;
@ -545,7 +544,6 @@ void listener_accept(int fd)
*/ */
if (!(l->options & LI_O_UNLIMITED)) if (!(l->options & LI_O_UNLIMITED))
actconn--; actconn--;
jobs--;
l->nbconn--; l->nbconn--;
if (ret == 0) /* successful termination */ if (ret == 0) /* successful termination */
continue; continue;

View File

@ -1836,7 +1836,6 @@ static struct appctx *peer_session_create(struct peers *peers, struct peer *peer
s->res.flags |= CF_READ_DONTWAIT; s->res.flags |= CF_READ_DONTWAIT;
p->feconn++;/* beconn will be increased later */ p->feconn++;/* beconn will be increased later */
jobs++;
totalconn++; totalconn++;
peer->appctx = appctx; peer->appctx = appctx;

View File

@ -53,6 +53,7 @@ struct session *session_new(struct proxy *fe, struct listener *li, enum obj_type
memset(sess->stkctr, 0, sizeof(sess->stkctr)); memset(sess->stkctr, 0, sizeof(sess->stkctr));
vars_init(&sess->vars, SCOPE_SESS); vars_init(&sess->vars, SCOPE_SESS);
sess->task = NULL; sess->task = NULL;
jobs++;
} }
return sess; return sess;
} }
@ -64,6 +65,7 @@ void session_free(struct session *sess)
session_store_counters(sess); session_store_counters(sess);
vars_prune_per_sess(&sess->vars); vars_prune_per_sess(&sess->vars);
pool_free2(pool2_session, sess); pool_free2(pool2_session, sess);
jobs--;
} }
/* perform minimal intializations, report 0 in case of error, 1 if OK. */ /* 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)) if (!(sess->listener->options & LI_O_UNLIMITED))
actconn--; actconn--;
jobs--;
sess->listener->nbconn--; sess->listener->nbconn--;
if (sess->listener->state == LI_FULL) if (sess->listener->state == LI_FULL)
resume_listener(sess->listener); resume_listener(sess->listener);

View File

@ -2420,7 +2420,7 @@ struct task *process_stream(struct task *t)
sess->fe->feconn--; sess->fe->feconn--;
if (s->flags & SF_BE_ASSIGNED) if (s->flags & SF_BE_ASSIGNED)
s->be->beconn--; s->be->beconn--;
jobs--;
if (sess->listener) { if (sess->listener) {
if (!(sess->listener->options & LI_O_UNLIMITED)) if (!(sess->listener->options & LI_O_UNLIMITED))
actconn--; actconn--;