Return NULL when callbacks cancel ETCP connection creation

This commit is contained in:
evgeny committed 2026-10-23 22:34:46 +02:00
1 parent 2ea4fb94ab
commit a51c080407
2 files changed
+45 -6

No files matched your search

+15 -5
View File
@@ -250,12 +250,22 @@ struct ETCP_CONN* etcp_connection_create(struct UTUN_INSTANCE* instance, char* n
DEBUG_DEBUG(DEBUG_CATEGORY_ETCP, "[%s] connection initialized. ETCP=%p mtu=%d, next_tx_id=%u state=pending",
etcp->log_name, etcp, etcp->mtu, etcp->next_tx_id);
// Вызываем callback для нового соединения если установлен
if (instance) {
struct etcp_inst_cbk_entry* cbe = instance->new_conn_cbks;
while (cbe) { struct etcp_inst_cbk_entry* n = cbe->next; cbe->fn(etcp, cbe->arg); cbe = n; }
/* Конструктор удерживает ресурсы до завершения уведомлений; отмена не возвращает закрытый объект. */
etcp->callbacks_running++;
struct etcp_inst_cbk_entry* cbe = instance->new_conn_cbks;
while (cbe) {
struct etcp_inst_cbk_entry* next = cbe->next;
cbe->fn(etcp, cbe->arg);
if (etcp->close_requested) break;
cbe = next;
}
if (!etcp->close_requested) etcp_fire_conn_status(etcp, ETCP_CONN_STATUS_NEW);
etcp->callbacks_running--;
if (etcp->close_requested) {
DEBUG_DEBUG(DEBUG_CATEGORY_ETCP, "[%s] connection creation cancelled by callback", etcp->log_name);
etcp_connection_close(etcp);
return NULL;
}
etcp_fire_conn_status(etcp, ETCP_CONN_STATUS_NEW);
return etcp;
}