Describe retained link scopes and callback-safe RX timeouts

This commit is contained in:
evgeny committed 2026-10-23 23:37:44 +02:00
1 parent 519a2ee242
commit 52d9077bb5
2 files changed
+7 -4

No files matched your search

+1
View File
@@ -7,6 +7,7 @@ extern "C" {
// подмодуль ETCP: keepalive-пакеты, таймер, адаптивный период и протокол
// спячки (sleep) на флагах самого keepalive-пакета.
// RX-timeout удерживает conn/link на время уведомлений. Close/удаление из callback прекращает обработку старого линка.
#include "etcp_connections.h"
+6 -4
View File
@@ -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: запись сразу отключается, освобождение ждёт выхода