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 */