From 827752e7ec006ac001d41005666955832832dc83 Mon Sep 17 00:00:00 2001 From: Thierry FOURNIER Date: Tue, 18 Aug 2015 11:34:18 +0200 Subject: [PATCH] BUG/MEDIUM: stick-tables: refcount error after copying SC for the session to the stream Each copyied SC counter will be used and released by the stream, so we need to increment the refcount. --- src/stream.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/stream.c b/src/stream.c index 910b3093e..c745ecfc3 100644 --- a/src/stream.c +++ b/src/stream.c @@ -71,6 +71,7 @@ struct stream *stream_new(struct session *sess, struct task *t, enum obj_type *o struct stream *s; struct connection *conn = objt_conn(origin); struct appctx *appctx = objt_appctx(origin); + int i; if (unlikely((s = pool_alloc2(pool2_stream)) == NULL)) return s; @@ -107,7 +108,13 @@ struct stream *stream_new(struct session *sess, struct task *t, enum obj_type *o s->current_rule_list = NULL; s->current_rule = NULL; + /* Copy SC counters for the stream. Each SC counter will be used by + * the stream, so we need to increment the refcount. + */ memcpy(s->stkctr, sess->stkctr, sizeof(s->stkctr)); + for (i = 0; i < MAX_SESS_STKCTR; i++) + if (stkctr_entry(&s->stkctr[i])) + stkctr_entry(&s->stkctr[i])->ref_cnt++; s->sess = sess; s->si[0].flags = SI_FL_NONE;