From 52d9077bb584d05a3a7104cb351aa7d0450ddd1e Mon Sep 17 00:00:00 2001 From: evgeny Date: Fri, 23 Oct 2026 23:37:44 +0200 Subject: [PATCH] Describe retained link scopes and callback-safe RX timeouts --- src/transport_layer/etcp_keepalive.h | 1 + src/transport_layer/stcp_link_doc.md | 10 ++++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/transport_layer/etcp_keepalive.h b/src/transport_layer/etcp_keepalive.h index 4f6f2b94..4c9551df 100644 --- a/src/transport_layer/etcp_keepalive.h +++ b/src/transport_layer/etcp_keepalive.h @@ -7,6 +7,7 @@ extern "C" { // подмодуль ETCP: keepalive-пакеты, таймер, адаптивный период и протокол // спячки (sleep) на флагах самого keepalive-пакета. +// RX-timeout удерживает conn/link на время уведомлений. Close/удаление из callback прекращает обработку старого линка. #include "etcp_connections.h" diff --git a/src/transport_layer/stcp_link_doc.md b/src/transport_layer/stcp_link_doc.md index 8abd5848..a358c947 100644 --- a/src/transport_layer/stcp_link_doc.md +++ b/src/transport_layer/stcp_link_doc.md @@ -55,13 +55,15 @@ ETCP владеет состоянием физического линка и ba Закрытие ETCP_LINK отменяет повторное подключение. Если обязательный таймер поставить невозможно, ETCP закрывает соединение с диагностикой вместо сохранения зависшего пути. -`etcp_link_close()` освобождает физический линк синхронно. Callback может закрыть этот линк, -соседний линк или всё соединение; повторный close уже закрываемого линка игнорируется. +`etcp_link_close()` сразу отвязывает физический линк и закрывает его ресурсы. Память сохраняется до выхода +активных внутренних обработчиков (конструктор, RX, INIT/reinit, READY, callbacks и RX-timeout). +Последний обработчик освобождает закрытый объект без дополнительного таймера или выделения памяти. +Callback может закрыть этот линк, соседний линк или всё соединение; повторный close закрываемого линка игнорируется. Поэтому через callback нельзя сохранять следующий элемент списка и продолжать обход по старому указателю. Конструкторы ETCP_CONN/ETCP_LINK возвращают NULL, если callback отменил создание. -До завершения конструктора линка память остаётся у него: close снимает ресурсы и помечает отмену, -после чего конструктор освобождает объект. Входящий STCP при отказе его присоединения закрывается. +Конструктор также удерживает память линка: close снимает ресурсы и помечает отмену, +после чего конструктор освобождает своё удержание. Входящий STCP при отказе его присоединения закрывается. Созданный для него ETCP_CONN удаляется только без других линков и NCD-владельцев: callback мог уже передать соединение другому сервису или создать запасной путь. Instance-подписки можно снимать внутри callbacks: запись сразу отключается, освобождение ждёт выхода