Clarify NEW cancellation and subscription mutation semantics
This commit is contained in:
1 parent
274554f7a5
commit
d5721563fc
2 files changed
+13
-1
No files matched your search
@@ -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 коллбэк «создано новое соединение»
|
||||
|
||||
@@ -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.
|
||||
Reference in new issue
Block a user