]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MEDIUM: quic: implement mux release/conn free
authorAmaury Denoyelle <adenoyelle@haproxy.com>
Wed, 22 Sep 2021 12:48:32 +0000 (14:48 +0200)
committerAmaury Denoyelle <adenoyelle@haproxy.com>
Thu, 23 Sep 2021 13:27:25 +0000 (15:27 +0200)
src/mux_quic.c

index f17ccd206393de6c0925a880ccc7641add77bd78..1c8669d3e660a3530176086945bcbf6de2b94326 100644 (file)
@@ -1029,7 +1029,9 @@ struct qcs *luqs_new(struct qcc *qcc)
 
        qcs->subs = NULL;
        LIST_INIT(&qcs->list);
-       eb64_insert(&qcc->streams_by_id, &qcs->by_id);
+       // TODO do not insert luqs into streams_by_id as it prevent to detect
+       // that the connection is dead
+       //eb64_insert(&qcc->streams_by_id, &qcs->by_id);
 
        TRACE_LEAVE(QC_EV_QCS_NEW, qcc->conn);
        return qcs;
@@ -1071,7 +1073,9 @@ struct qcs *ruqs_new(struct qcc *qcc, uint64_t id)
 
        qcs->subs = NULL;
        LIST_INIT(&qcs->list);
-       eb64_insert(&qcc->streams_by_id, &qcs->by_id);
+       // TODO do not insert ruqs into streams_by_id as it prevent to detect
+       // that the connection is dead
+       //eb64_insert(&qcc->streams_by_id, &qcs->by_id);
 
        TRACE_LEAVE(QC_EV_QCS_NEW, qcc->conn);
        return qcs;
@@ -1595,9 +1599,12 @@ static void qc_destroy(void *ctx)
 static void qc_detach(struct conn_stream *cs)
 {
        struct qcs *qcs = cs->ctx;
+       struct qcc *qcc = qcs->qcc;
 
        TRACE_ENTER(QC_EV_STRM_END, qcs ? qcs->qcc->conn : NULL, qcs);
-       /* XXX TO DO XXX */
+       qcs_destroy(qcs);
+       if (eb_is_empty(&qcc->streams_by_id))
+               qc_release(qcc);
        TRACE_LEAVE(QC_EV_STRM_END, qcs ? qcs->qcc->conn : NULL);
 }