MINOR: stream: detach the stream from its own task on stream_free()

This makes sure that the stream is not visible from its own task just
before starting to free some of its components. This way we have the
guarantee that a stream found in a task list is totally valid and can
safely be dereferenced.
This commit is contained in:
Willy Tarreau 2019-05-17 14:20:05 +02:00
parent 29bf96d73d
commit 0ad46fa6f5
1 changed files with 6 additions and 0 deletions

View File

@ -364,6 +364,12 @@ static void stream_free(struct stream *s)
int must_free_sess;
int i;
/* detach the stream from its own task before even releasing it so
* that walking over a task list never exhibits a dying stream.
*/
s->task->context = NULL;
__ha_barrier_store();
pendconn_free(s);
if (objt_server(s->target)) { /* there may be requests left pending in queue */