etcp: фикс зависшего reinit_pending после реинита готового соединения

etcp_conn_queue_set_ready() делает ранний выход по state!=0, поэтому при
реините уже готового соединения (peer restart / duplicate INIT / collision)
reinit_pending оставался в 1 навсегда. Добавленные в 841b3042 guard'ы
etcp_conn_input/etcp_output_try_assembly дропали все входящие пакеты.

Снятие reinit_pending + REINIT перенесено в etcp_conn_ready.
This commit is contained in:
evgeny committed 2026-09-19 23:13:04 +03:00
1 parent 5e955168d2
commit 688785fc6e
1 file changed
+8
+8
View File
@@ -668,6 +668,14 @@ void etcp_conn_ready(struct ETCP_CONN* conn) {
DEBUG_INFO(DEBUG_CATEGORY_ETCP, "[%s] Connection ready", conn->log_name);
etcp_conn_queue_set_ready(conn);
// Реинит уже готового соединения (state!=0): etcp_conn_queue_set_ready не сработал
// (ранний выход по state!=0), поэтому reinit_pending остаётся висеть и блокирует приём —
// guard'ы в etcp_conn_input/etcp_output_try_assembly дропают все входящие пакеты.
if (conn->reinit_pending) {
conn->reinit_pending = 0;
etcp_cbk_fire(conn, ETCP_CBK_EVENT_REINIT);
}
}
// Move from pending to indexed connections, fire ready callbacks