mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-31 14:35:26 +00:00
Use ISC_R_SHUTTINGDOWN to detect netmgr shutting down
When the dispatch code was refactored in libdns, the netmgr was changed to return ISC_R_SHUTTINGDOWN when the netmgr is shutting down, and the ISC_R_CANCELED is now reserved only for situation where the callback was canceled by the caller. This change wasn't reflected in the controlconf.c channel which was still looking for ISC_R_CANCELED as the shutdown event.
This commit is contained in:
@@ -231,7 +231,7 @@ control_senddone(isc_nmhandle_t *handle, isc_result_t result, void *arg) {
|
||||
}
|
||||
|
||||
if (atomic_load_acquire(&listener->controls->shuttingdown) ||
|
||||
result == ISC_R_CANCELED)
|
||||
result == ISC_R_SHUTTINGDOWN)
|
||||
{
|
||||
goto cleanup_sendhandle;
|
||||
} else if (result != ISC_R_SUCCESS) {
|
||||
@@ -414,7 +414,7 @@ control_recvmessage(isc_nmhandle_t *handle, isc_result_t result, void *arg) {
|
||||
}
|
||||
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
if (result == ISC_R_SHUTTINGDOWN || result == ISC_R_CANCELED) {
|
||||
if (result == ISC_R_SHUTTINGDOWN) {
|
||||
atomic_store_release(&listener->controls->shuttingdown,
|
||||
true);
|
||||
} else if (result != ISC_R_EOF) {
|
||||
@@ -630,7 +630,7 @@ control_newconn(isc_nmhandle_t *handle, isc_result_t result, void *arg) {
|
||||
isc_sockaddr_t peeraddr;
|
||||
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
if (result == ISC_R_CANCELED) {
|
||||
if (result == ISC_R_SHUTTINGDOWN) {
|
||||
shutdown_listener(listener);
|
||||
}
|
||||
return (result);
|
||||
|
@@ -51,17 +51,22 @@ recv_data(isc_nmhandle_t *handle, isc_result_t eresult, isc_region_t *region,
|
||||
|
||||
INSIST(VALID_CCMSG(ccmsg));
|
||||
|
||||
if (eresult == ISC_R_CANCELED || eresult == ISC_R_EOF) {
|
||||
switch (eresult) {
|
||||
case ISC_R_SHUTTINGDOWN:
|
||||
case ISC_R_CANCELED:
|
||||
case ISC_R_EOF:
|
||||
ccmsg->result = eresult;
|
||||
goto done;
|
||||
} else if (region == NULL && eresult == ISC_R_SUCCESS) {
|
||||
ccmsg->result = ISC_R_EOF;
|
||||
goto done;
|
||||
} else if (eresult != ISC_R_SUCCESS) {
|
||||
case ISC_R_SUCCESS:
|
||||
if (region == NULL) {
|
||||
ccmsg->result = ISC_R_EOF;
|
||||
goto done;
|
||||
}
|
||||
ccmsg->result = ISC_R_SUCCESS;
|
||||
break;
|
||||
default:
|
||||
ccmsg->result = eresult;
|
||||
goto done;
|
||||
} else {
|
||||
ccmsg->result = eresult;
|
||||
}
|
||||
|
||||
if (!ccmsg->length_received) {
|
||||
|
Reference in New Issue
Block a user