]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MEDIUM: session: take care of incrementing/decrementing jobs
authorWilly Tarreau <w@1wt.eu>
Fri, 15 Sep 2017 07:07:56 +0000 (09:07 +0200)
committerWilly Tarreau <w@1wt.eu>
Fri, 15 Sep 2017 09:49:52 +0000 (11:49 +0200)
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
src/hlua.c
src/listener.c
src/peers.c
src/session.c
src/stream.c

index 47aef57626b05f12ff07000f20cf9252d0c04fbe..f27880975dc8c46e9f50221d99e30d6474325b59 100644 (file)
@@ -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);
index acf5896968f91082e4ca09338f2a986083ac4f29..e1b7264979f5f1cebef90bcd6c502f983f0331ca 100644 (file)
@@ -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);
index d193b511a06f8cb709a5a567ce079d00c7b51e6b..0af49b0e46916c3d87a52efdaaf91dfc7c381290 100644 (file)
@@ -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;
index 8fb3b78ae8c5971835c49d9b558dd0fe06faa4ed..17f186769ad70bff234e5f1f22067e8ca71085af 100644 (file)
@@ -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;
index c86baff60019d860243311771de6966bb91aba95..68a4303d68ad559641357ba4004131eeae669c0d 100644 (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));
                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);
index e9d640016c386194fb419bd40e279a4cc8d155cc..d8c1a7e0d1aabb44b11510e45fa9c394c822a77d 100644 (file)
@@ -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--;