From 688785fc6e87f5acd1507fb42ccd03b93d850cf4 Mon Sep 17 00:00:00 2001 From: evgeny Date: Sat, 19 Sep 2026 23:13:04 +0300 Subject: [PATCH] =?UTF-8?q?etcp:=20=D1=84=D0=B8=D0=BA=D1=81=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=B2=D0=B8=D1=81=D1=88=D0=B5=D0=B3=D0=BE=20reinit=5Fpending?= =?UTF-8?q?=20=D0=BF=D0=BE=D1=81=D0=BB=D0=B5=20=D1=80=D0=B5=D0=B8=D0=BD?= =?UTF-8?q?=D0=B8=D1=82=D0=B0=20=D0=B3=D0=BE=D1=82=D0=BE=D0=B2=D0=BE=D0=B3?= =?UTF-8?q?=D0=BE=20=D1=81=D0=BE=D0=B5=D0=B4=D0=B8=D0=BD=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- src/transport_layer/etcp.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/transport_layer/etcp.c b/src/transport_layer/etcp.c index d9dc915d..b6300ab3 100644 --- a/src/transport_layer/etcp.c +++ b/src/transport_layer/etcp.c @@ -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