From: Ondřej Surý Date: Mon, 25 Apr 2022 11:38:33 +0000 (+0200) Subject: The route socket and its storage was detached while still reading X-Git-Tag: v9.19.1~53^2 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=9ae34a04e86ec60d0e11188de3ba6617cd00a92e;p=thirdparty%2Fbind9.git The route socket and its storage was detached while still reading The interfacemgr and the .route was being detached while the network manager had pending read from the socket. Instead of detaching from the socket, we need to cancel the read which in turn will detach the route socket and the associated interfacemgr. --- diff --git a/lib/ns/interfacemgr.c b/lib/ns/interfacemgr.c index 4d278f85035..d62b8d92d4b 100644 --- a/lib/ns/interfacemgr.c +++ b/lib/ns/interfacemgr.c @@ -215,16 +215,9 @@ route_recv(isc_nmhandle_t *handle, isc_result_t eresult, isc_region_t *region, return; } - if (eresult == ISC_R_SHUTTINGDOWN) { - /* - * The mgr->route and mgr is detached in - * ns_interfacemgr_shutdown() - */ - return; - } - if (eresult != ISC_R_SUCCESS) { - if (eresult != ISC_R_CANCELED) { + if (eresult != ISC_R_CANCELED && eresult != ISC_R_SHUTTINGDOWN) + { isc_log_write(IFMGR_COMMON_LOGARGS, ISC_LOG_ERROR, "automatic interface scanning " "terminated: %s", @@ -453,8 +446,7 @@ ns_interfacemgr_shutdown(ns_interfacemgr_t *mgr) { purge_old_interfaces(mgr); if (mgr->route != NULL) { - isc_nmhandle_detach(&mgr->route); - ns_interfacemgr_detach(&mgr); + isc_nm_cancelread(mgr->route); } }