2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-08-31 06:25:31 +00:00

Handle the case where kill_name() is called on an already dead name correctly.

This commit is contained in:
Michael Graff
1999-10-26 23:57:38 +00:00
parent 21aaaeddab
commit 7ec42e4be4

View File

@@ -258,11 +258,28 @@ kill_name(dns_adb_t *adb, dns_adbname_t **n, isc_eventtype_t ev)
name = *n; name = *n;
*n = NULL; *n = NULL;
INSIST(DNS_ADBNAME_VALID(name)); INSIST(DNS_ADBNAME_VALID(name));
INSIST(name->dead == ISC_FALSE);
/*
* If we're dead already, just check to see if we should go
* away now or not.
*/
if (name->dead && ISC_LIST_EMPTY(name->fetches)) {
unlink_name(adb, name);
free_adbname(adb, &name);
return;
}
/*
* Clean up the name's various lists. These two are destructive
* in that they will always empty the list.
*/
clean_handles_at_name(name, ev); clean_handles_at_name(name, ev);
clean_namehooks_at_name(adb, name); clean_namehooks_at_name(adb, name);
/*
* If fetches are running, cancel them. If none are running, we can
* just kill the name here.
*/
if (ISC_LIST_EMPTY(name->fetches)) { if (ISC_LIST_EMPTY(name->fetches)) {
unlink_name(adb, name); unlink_name(adb, name);
free_adbname(adb, &name); free_adbname(adb, &name);