Clarify connection references versus active callback lifetime
This commit is contained in:
1 parent
b1e94eff34
commit
0d5e9332e3
2 files changed
+7
-6
No files matched your search
@@ -280,18 +280,19 @@ void etcp_conn_queue_set_ready(struct ETCP_CONN* conn); // переиндекс
|
||||
* @param conn connection
|
||||
* @return 0 on success, -1 if conn is NULL, closing or already deleted (state 2).
|
||||
*
|
||||
* Increments ref_count. While ref_count > 0, etcp_connection_close()
|
||||
* will detach but defer resource cleanup until all references are released.
|
||||
* Increments ref_count and retains the connection object and phase-2 resources.
|
||||
* Close still frees the normalizer and physical links during phase 1; this reference
|
||||
* does not keep those pointers valid. Active callbacks defer phase 1 via callbacks_running.
|
||||
* Always pair with etcp_conn_ref_free().
|
||||
*/
|
||||
int etcp_conn_ref_take(struct ETCP_CONN* conn);
|
||||
|
||||
/**
|
||||
* @brief Release a reference. Triggers deferred resource free if last ref and state==2.
|
||||
* @brief Release a reference. Schedules phase-2 free after close completes and the last ref/callback exits.
|
||||
* @param conn connection
|
||||
*
|
||||
* Decrements ref_count. If ref_count reaches 0 and the connection has been closed
|
||||
* (state == 2), schedules deferred resource cleanup via uasync_call_soon.
|
||||
* Decrements ref_count. If close phase 1 is complete, no references/callbacks remain,
|
||||
* and free has not been scheduled, schedules phase-2 cleanup via uasync_call_soon.
|
||||
* Safe to call on NULL.
|
||||
*/
|
||||
void etcp_conn_ref_free(struct ETCP_CONN* conn);
|
||||
|
||||
@@ -43,7 +43,7 @@ queue_data_put(pn->input, entry);
|
||||
|
||||
Неверный заголовок/длина и OOM после принятия данных вызывают `etcp_conn_fatal_reinit()`: новая локальная эпоха, очистка старого потока и согласование с пиром при сохранённых физических линках. Старые кодограммы не воспроизводятся; после согласования владельцы получают REINIT и восстанавливают операции своего протокола. До сохранения RX DATA в `recv_q` OOM обрабатывает сам ETCP: отбрасывает фрагмент без ACK.
|
||||
|
||||
Normalizеr не удерживает отдельную OOM-очередь или retry-таймер. После reset/close из пользовательского callback обработчик прекращает старый разбор; извлечённый им фрагмент остаётся его собственностью до однократного освобождения. Счётчик активных callbacks откладывает освобождение normalizer при закрытии.
|
||||
Normalizer не удерживает отдельную OOM-очередь или retry-таймер. После reset/close из пользовательского callback обработчик прекращает старый разбор; извлечённый им фрагмент остаётся его собственностью до однократного освобождения. Счётчик активных callbacks откладывает освобождение normalizer при закрытии.
|
||||
|
||||
## 3. API
|
||||
|
||||
|
||||
Reference in new issue
Block a user