mirror of
https://github.com/isc-projects/bind9.git
synced 2026-05-28 04:34:54 -04:00
Emit a ISC_R_CANCELED result instead of ISC_R_SHUTTINGDOWN
When request manager shuts down, it also shuts down all its ongoing requests. Currently it calls their callback functions with a ISC_R_SHUTTINGDOWN result code for the request. Since a request manager can shutdown not only during named shutdown but also during named reconfiguration, instead of sending ISC_R_SHUTTINGDOWN result code send a ISC_R_CANCELED code to avoid confusion and errors with the expectation that a ISC_R_SHUTTINGDOWN result code can only be received during actual shutdown of named. All the callback functions which are passed to either the dns_request_create() or the dns_request_createraw() functions have been analyzed to confirm that they can process both the ISC_R_SHUTTINGDOWN and ISC_R_CANCELED result codes. Changes were made where it was necessary.
This commit is contained in:
parent
aa6ca3e776
commit
f4cd307c6b
3 changed files with 8 additions and 6 deletions
|
|
@ -777,7 +777,7 @@ sleep 1
|
|||
# Reconfigure named while zone transfer attempt is in progress.
|
||||
$RNDCCMD 10.53.0.6 reconfig 2>&1 | sed 's/^/ns6 /' | cat_i
|
||||
# Confirm that the ongoing SOA request was canceled, caused by the reconfiguratoin.
|
||||
retry_quiet 60 wait_for_message "refresh: request result: shutting down" || tmp=1
|
||||
retry_quiet 60 wait_for_message "refresh: request result: operation canceled" || tmp=1
|
||||
if test $tmp != 0; then echo_i "failed"; fi
|
||||
status=$((status + tmp))
|
||||
|
||||
|
|
|
|||
|
|
@ -144,7 +144,7 @@ dns_requestmgr_create(isc_mem_t *mctx, isc_loopmgr_t *loopmgr,
|
|||
for (size_t i = 0; i < nloops; i++) {
|
||||
ISC_LIST_INIT(requestmgr->requests[i]);
|
||||
|
||||
/* unreferenced in requests_shutdown() */
|
||||
/* unreferenced in requests_cancel() */
|
||||
isc_loop_ref(isc_loop_get(requestmgr->loopmgr, i));
|
||||
}
|
||||
|
||||
|
|
@ -170,7 +170,7 @@ dns_requestmgr_create(isc_mem_t *mctx, isc_loopmgr_t *loopmgr,
|
|||
}
|
||||
|
||||
static void
|
||||
requests_shutdown(void *arg) {
|
||||
requests_cancel(void *arg) {
|
||||
dns_requestmgr_t *requestmgr = arg;
|
||||
uint32_t tid = isc_tid();
|
||||
|
||||
|
|
@ -181,7 +181,7 @@ requests_shutdown(void *arg) {
|
|||
/* The callback has been already scheduled */
|
||||
continue;
|
||||
}
|
||||
req_sendevent(request, ISC_R_SHUTTINGDOWN);
|
||||
req_sendevent(request, ISC_R_CANCELED);
|
||||
}
|
||||
|
||||
isc_loop_unref(isc_loop_get(requestmgr->loopmgr, tid));
|
||||
|
|
@ -217,12 +217,12 @@ dns_requestmgr_shutdown(dns_requestmgr_t *requestmgr) {
|
|||
|
||||
if (i == tid) {
|
||||
/* Run the current loop synchronously */
|
||||
requests_shutdown(requestmgr);
|
||||
requests_cancel(requestmgr);
|
||||
continue;
|
||||
}
|
||||
|
||||
isc_loop_t *loop = isc_loop_get(requestmgr->loopmgr, i);
|
||||
isc_async_run(loop, requests_shutdown, requestmgr);
|
||||
isc_async_run(loop, requests_cancel, requestmgr);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -13584,6 +13584,7 @@ stub_callback(void *arg) {
|
|||
case ISC_R_SUCCESS:
|
||||
break;
|
||||
case ISC_R_SHUTTINGDOWN:
|
||||
case ISC_R_CANCELED:
|
||||
goto exiting;
|
||||
case ISC_R_TIMEDOUT:
|
||||
if (!DNS_ZONE_FLAG(zone, DNS_ZONEFLG_NOEDNS)) {
|
||||
|
|
@ -13928,6 +13929,7 @@ refresh_callback(void *arg) {
|
|||
case ISC_R_SUCCESS:
|
||||
break;
|
||||
case ISC_R_SHUTTINGDOWN:
|
||||
case ISC_R_CANCELED:
|
||||
goto exiting;
|
||||
case ISC_R_TIMEDOUT:
|
||||
if (!DNS_ZONE_FLAG(zone, DNS_ZONEFLG_NOEDNS)) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue