MINOR: conn_stream: add a pointer back to the cs from the endpoint

Muxes and applets need to have both a pointer to the endpoint and to the
conn_stream. It would seem more natural that they only have a pointer to
the endpoint (that is always there) and that this one has an optional
pointer to the conn_stream. This would reduce the number of elements to
manipulate in lower level code. In addition, the conn_stream is not much
used from the lower layers (wake and exceptional events mostly).
diff --git a/include/haproxy/conn_stream-t.h b/include/haproxy/conn_stream-t.h
index d746d6e..6701107 100644
--- a/include/haproxy/conn_stream-t.h
+++ b/include/haproxy/conn_stream-t.h
@@ -158,11 +158,13 @@
  *
  * <target> is the mux or the appctx
  * <ctx>    is the context set and used by <target>
+ * <cs>     is the conn_stream we're attached to, or NULL
  * <flags>  CS_EP_*
 */
 struct cs_endpoint {
 	void *target;
 	void *ctx;
+	struct conn_stream *cs;
 	unsigned int flags;
 };
 
diff --git a/src/conn_stream.c b/src/conn_stream.c
index b514790..5fda0d8 100644
--- a/src/conn_stream.c
+++ b/src/conn_stream.c
@@ -86,6 +86,7 @@
 {
 	endp->target = NULL;
 	endp->ctx = NULL;
+	endp->cs = NULL;
 	endp->flags = CS_EP_NONE;
 }
 
@@ -112,7 +113,7 @@
 
 /* Tries to allocate a new conn_stream and initialize its main fields. On
  * failure, nothing is allocated and NULL is returned. It is an internal
- * function. The caller must, at least, set the CS_EP_ORPHAN or CS_EP_DETAC§HED
+ * function. The caller must, at least, set the CS_EP_ORPHAN or CS_EP_DETACHED
  * flag.
  */
 static struct conn_stream *cs_new(struct cs_endpoint *endp)
@@ -142,6 +143,7 @@
 			goto alloc_error;
 	}
 	cs->endp = endp;
+	endp->cs = cs;
 
 	return cs;
 
@@ -364,9 +366,10 @@
 
 		if (conn->mux) {
 			/* TODO: handle unsubscribe for healthchecks too */
-			cs->endp->flags |= CS_EP_ORPHAN;
 			if (cs->wait_event.events != 0)
 				conn->mux->unsubscribe(cs, cs->wait_event.events, &cs->wait_event);
+			cs->endp->flags |= CS_EP_ORPHAN;
+			cs->endp->cs = NULL;
 			conn->mux->detach(cs);
 			cs->endp = NULL;
 		}
@@ -384,8 +387,9 @@
 	else if (cs->endp->flags & CS_EP_T_APPLET) {
 		struct appctx *appctx = __cs_appctx(cs);
 
-		cs->endp->flags |= CS_EP_ORPHAN;
 		cs_applet_shut(cs);
+		cs->endp->flags |= CS_EP_ORPHAN;
+		cs->endp->cs = NULL;
 		appctx_free(appctx);
 		cs->endp = NULL;
 	}
@@ -478,6 +482,7 @@
 	cs_detach_endp(&cs);
 	BUG_ON(cs->endp);
 	cs->endp = new_endp;
+	cs->endp->cs = cs;
 	cs->endp->flags |= CS_EP_DETACHED;
 	return 0;
 }