Clarify NEW cancellation and subscription mutation semantics

This commit is contained in:
evgeny committed 2026-10-23 22:43:09 +02:00
1 parent 274554f7a5
commit d5721563fc
2 files changed
+13 -1

No files matched your search

+4 -1
View File
@@ -81,7 +81,7 @@ extern "C" {
// Connection status events (instance-level callback).
// NEW начинает жизнь объекта, UP/DOWN отражают доступность, DELETE завершает её.
// NEW — один раз при создании соединения.
// NEW — один раз после new-connection callbacks, если они не отменили создание.
// UP — переход links_up 0→1 (UP после UP не вызывается).
// DOWN — переход links_up 1→0 (DOWN после DOWN не вызывается).
// DELETE — один раз при закрытии, финальный; единственный статус, допустимый при state==2.
@@ -196,6 +196,9 @@ void etcp_conn_remove_cbk(struct ETCP_CONN* conn, etcp_cbk_fn fn, void* arg);
*/
void etcp_conn_update_cbk_mask(struct ETCP_CONN* conn, etcp_cbk_fn fn, void* arg, int event_mask);
/* Instance-подписки new/conn-status/link-status/socket можно снимать из callback, включая себя и следующий.
* Снятие немедленно отключает запись, память освобождается после внешней рассылки. Добавленные записи
* не участвуют в уже начатом обходе, но видны отдельной вложенной рассылке. Destroy instance внутри callback запрещён. */
// ---- Instance-level callbacks ----
/**
* @brief Зарегистрировать instance-level коллбэк «создано новое соединение»
+9
View File
@@ -59,6 +59,12 @@ ETCP закрывает соединение с диагностикой вме
соседний линк или всё соединение; повторный close уже закрываемого линка игнорируется.
Поэтому через callback нельзя сохранять следующий элемент списка и продолжать обход по старому указателю.
Конструкторы ETCP_CONN/ETCP_LINK возвращают NULL, если callback отменил создание.
До завершения конструктора линка память остаётся у него: close снимает ресурсы и помечает отмену,
после чего конструктор освобождает объект. Входящий STCP при отказе его присоединения закрывается.
Instance-подписки можно снимать внутри callbacks: запись сразу отключается, освобождение ждёт выхода
из внешней рассылки. Новая подписка не попадает в начатый обход, но доступна вложенному событию.
## Проверки
`test_transport` проверяет передачу, неверный ключ, ранний отказ connect, таймаут handshake,
@@ -67,3 +73,6 @@ ETCP закрывает соединение с диагностикой вме
закрытие из READY/DOWN для клиента и сервера, plain STCP и REALITY,
отсутствие поздних READY, backoff, его сброс после восстановления и отмену повторного подключения.
Проверяется баланс сокетов, таймеров и учитываемых выделений памяти.
Дополнительно проверяются отмена создания из callbacks и снятие подписки для обеих ролей STCP/REALITY.
`test_etcp_lifecycle` проверяет снятие себя/следующей записи, добавление подписки и вложенную рассылку
для всех четырёх instance-цепочек ETCP.