From: Thierry FOURNIER Date: Tue, 18 Aug 2015 09:34:18 +0000 (+0200) Subject: BUG/MEDIUM: stick-tables: refcount error after copying SC for the session to the... X-Git-Tag: v1.6-dev4~66 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=827752e;p=thirdparty%2Fhaproxy.git 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. --- diff --git a/src/stream.c b/src/stream.c index 910b3093e6..c745ecfc3e 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;