mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-25 15:51:24 +02:00
MINOR: session: release the listener with the session, not the stream
Since multiple streams can share one session attached to one listener, the listener_release() call must be done in session_free() and not in stream_free(), otherwise we end up with a negative count in H2.
This commit is contained in:
parent
436d333124
commit
4f0c64cad7
@ -65,6 +65,8 @@ struct session *session_new(struct proxy *fe, struct listener *li, enum obj_type
|
|||||||
void session_free(struct session *sess)
|
void session_free(struct session *sess)
|
||||||
{
|
{
|
||||||
HA_ATOMIC_SUB(&sess->fe->feconn, 1);
|
HA_ATOMIC_SUB(&sess->fe->feconn, 1);
|
||||||
|
if (sess->listener)
|
||||||
|
listener_release(sess->listener);
|
||||||
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);
|
||||||
@ -361,8 +363,6 @@ static void session_kill_embryonic(struct session *sess)
|
|||||||
conn_full_close(conn);
|
conn_full_close(conn);
|
||||||
conn_free(conn);
|
conn_free(conn);
|
||||||
|
|
||||||
listener_release(sess->listener);
|
|
||||||
|
|
||||||
task_delete(task);
|
task_delete(task);
|
||||||
task_free(task);
|
task_free(task);
|
||||||
session_free(sess);
|
session_free(sess);
|
||||||
|
@ -2455,9 +2455,6 @@ struct task *process_stream(struct task *t)
|
|||||||
if (s->flags & SF_BE_ASSIGNED)
|
if (s->flags & SF_BE_ASSIGNED)
|
||||||
HA_ATOMIC_SUB(&s->be->beconn, 1);
|
HA_ATOMIC_SUB(&s->be->beconn, 1);
|
||||||
|
|
||||||
if (sess->listener)
|
|
||||||
listener_release(sess->listener);
|
|
||||||
|
|
||||||
if (unlikely((global.mode & MODE_DEBUG) &&
|
if (unlikely((global.mode & MODE_DEBUG) &&
|
||||||
(!(global.mode & MODE_QUIET) || (global.mode & MODE_VERBOSE)))) {
|
(!(global.mode & MODE_QUIET) || (global.mode & MODE_VERBOSE)))) {
|
||||||
chunk_printf(&trash, "%08x:%s.closed[%04x:%04x]\n",
|
chunk_printf(&trash, "%08x:%s.closed[%04x:%04x]\n",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user