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.
diff --git a/src/stream.c b/src/stream.c
index 62c5598..2b2d399 100644
--- a/src/stream.c
+++ b/src/stream.c
@@ -364,6 +364,12 @@
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 */