From: Ondřej Surý Date: Thu, 18 Mar 2021 20:37:12 +0000 (+0100) Subject: Call the isc__nm_failed_connect_cb() early when shutting down X-Git-Tag: v9.17.12~35^2 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=e4b07303877cd753d00a21c91eb4443ef293ddb9;p=thirdparty%2Fbind9.git Call the isc__nm_failed_connect_cb() early when shutting down When shutting down, calling the isc__nm_failed_connect_cb() was delayed until the connect callback would be called. It turned out that the connect callback might not get called at all when the socket is being shut down. Call the failed_connect_cb() directly in the tlsdns_shutdown() instead of waiting for the connect callback to call it. --- diff --git a/lib/isc/netmgr/tlsdns.c b/lib/isc/netmgr/tlsdns.c index 961dceaadd5..330a2ae324e 100644 --- a/lib/isc/netmgr/tlsdns.c +++ b/lib/isc/netmgr/tlsdns.c @@ -760,7 +760,7 @@ isc__nm_tlsdns_failed_read_cb(isc_nmsocket_t *sock, isc_result_t result) { isc__nmsocket_timer_stop(sock); isc__nm_stop_reading(sock); - if (sock->tls.pending_req) { + if (sock->tls.pending_req != NULL) { isc__nm_uvreq_t *req = sock->tls.pending_req; sock->tls.pending_req = NULL; isc__nm_failed_connect_cb(sock, req, ISC_R_CANCELED); @@ -1835,16 +1835,16 @@ isc__nm_tlsdns_shutdown(isc_nmsocket_t *sock) { return; } - if (atomic_load(&sock->connecting) || sock->accepting) { - return; - } - - if (sock->tls.pending_req) { + if (sock->tls.pending_req != NULL) { isc__nm_uvreq_t *req = sock->tls.pending_req; sock->tls.pending_req = NULL; isc__nm_failed_connect_cb(sock, req, ISC_R_CANCELED); } + if (atomic_load(&sock->connecting) || sock->accepting) { + return; + } + if (sock->statichandle) { isc__nm_failed_read_cb(sock, ISC_R_CANCELED); return;