{
struct qcc *qcc = qcs->qcc;
- /* A stream cannot be registered several times. */
- BUG_ON_HOT(tick_isset(qcs->start));
- qcs->start = now_ms;
-
- /* qcc.opening_list size is limited by flow-control so no custom
- * restriction is needed here.
- */
- LIST_APPEND(&qcc->opening_list, &qcs->el_opening);
+ if (!conn_is_back(qcc->conn)) {
+ /* A stream cannot be registered several times. */
+ BUG_ON_HOT(tick_isset(qcs->start));
+ qcs->start = now_ms;
+
+ /* qcc.opening_list size is limited by flow-control so no
+ * custom restriction is needed here.
+ */
+ LIST_APPEND(&qcc->opening_list, &qcs->el_opening);
+ }
}
void qcc_show_quic(struct qcc *qcc);
qcc->idle_start = now_ms;
}
+/* Return true if the mux timeout should be armed. */
+static inline int qcc_may_expire(struct qcc *qcc)
+{
+ return !qcc->nb_sc;
+}
+
/* Decrement <qcc> sc. */
static forceinline void qcc_rm_sc(struct qcc *qcc)
{
/* Reset qcc idle start for http-keep-alive timeout. Timeout will be
* refreshed after this on stream detach.
*/
- if (!qcc->nb_sc && !qcc->nb_hreq)
+ if (!conn_is_back(qcc->conn) && qcc_may_expire(qcc) && !qcc->nb_hreq)
qcc_reset_idle_start(qcc);
}
/* Reset qcc idle start for http-keep-alive timeout. Timeout will be
* refreshed after this on I/O handler.
*/
- if (!qcc->nb_sc && !qcc->nb_hreq)
+ if (!conn_is_back(qcc->conn) && qcc_may_expire(qcc) && !qcc->nb_hreq)
qcc_reset_idle_start(qcc);
}
return 0;
}
-/* Return true if the mux timeout should be armed. */
-static inline int qcc_may_expire(struct qcc *qcc)
-{
- return !qcc->nb_sc;
-}
-
/* Refresh the timeout on <qcc> if needed depending on its state. */
static void qcc_refresh_timeout(struct qcc *qcc)
{