Return NULL when callbacks cancel ETCP connection creation
This commit is contained in:
1 parent
2ea4fb94ab
commit
a51c080407
2 files changed
+45
-6
No files matched your search
@@ -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;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user