Describe retained link scopes and callback-safe RX timeouts
This commit is contained in:
1 parent
519a2ee242
commit
52d9077bb5
2 files changed
+7
-4
No files matched your search
@@ -7,6 +7,7 @@ extern "C" {
|
||||
|
||||
// подмодуль ETCP: keepalive-пакеты, таймер, адаптивный период и протокол
|
||||
// спячки (sleep) на флагах самого keepalive-пакета.
|
||||
// RX-timeout удерживает conn/link на время уведомлений. Close/удаление из callback прекращает обработку старого линка.
|
||||
|
||||
#include "etcp_connections.h"
|
||||
|
||||
|
||||
@@ -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: запись сразу отключается, освобождение ждёт выхода
|
||||
|
||||
Reference in new issue
Block a user