BUG/MAJOR: stream: in stream_free(), close the front endpoint and not the origin

stream_free() used to close the front connection by using s->sess->origin,
instead of using s->si[0].end. This is very visible in HTTP/2 where the
front connection is abusively closed and causes all sort of issues including
crashes caused by double closes due to the same origin being referenced many
times.

It's also suspected that it may have caused some of the early issues met
during the Lua development.

It's uncertain whether stable branches are affected. It might be worth
backporting it once it has been confirmed not to create new impacts.
This commit is contained in:
Willy Tarreau 2017-08-17 15:54:46 +02:00
parent 50bc31d4d6
commit 7632548d97

View File

@ -262,7 +262,7 @@ static void stream_free(struct stream *s)
struct session *sess = strm_sess(s);
struct proxy *fe = sess->fe;
struct bref *bref, *back;
struct connection *cli_conn = objt_conn(sess->origin);
struct connection *cli_conn = objt_conn(s->si[0].end);
int i;
if (s->pend_pos)