Commit d2e1b47d authored by Mark Andrews's avatar Mark Andrews
Browse files

4553. [bug] Named could deadlock there were multiple changes to

                        NSEC/NSEC3 parameters for a zone being processed at
                        the same time. [RT #42770]
parent 42924b40
4553. [bug] Named could deadlock there were multiple changes to
NSEC/NSEC3 parameters for a zone being processed at
the same time. [RT #42770]
4552. [bug] Named could trigger a assertion when sending notify
messages. [RT #44019]
......
......@@ -195,6 +195,13 @@
<section xml:id="relnotes_bugs"><info><title>Bug Fixes</title></info>
<itemizedlist>
<listitem>
<para>
Named could deadlock there were multiple changes to
NSEC/NSEC3 parameters for a zone being processed at the
same time. [RT #42770]
</para>
</listitem>
<listitem>
<para>
Named could trigger a assertion when sending notify
......
......@@ -9270,6 +9270,9 @@ dbiterator_first(dns_dbiterator_t *iterator) {
rbtdbiter->result = result;
if (result != ISC_R_SUCCESS)
ENSURE(!rbtdbiter->paused);
return (result);
}
......
......@@ -7475,6 +7475,9 @@ zone_nsec3chain(dns_zone_t *zone) {
nsec3chain->save_delete_nsec = nsec3chain->delete_nsec;
}
if (nsec3chain != NULL)
goto skip_removals;
/*
* Process removals.
*/
......@@ -7682,6 +7685,7 @@ zone_nsec3chain(dns_zone_t *zone) {
first = ISC_TRUE;
}
skip_removals:
/*
* We may need to update the NSEC/NSEC3 records for the zone apex.
*/
......@@ -7744,9 +7748,6 @@ zone_nsec3chain(dns_zone_t *zone) {
}
}
if (nsec3chain != NULL)
dns_dbiterator_pause(nsec3chain->dbiterator);
/*
* Add / update signatures for the NSEC3 records.
*/
......@@ -8460,6 +8461,14 @@ zone_sign(dns_zone_t *zone) {
}
failure:
/*
* Pause all dbiterators.
*/
for (signing = ISC_LIST_HEAD(zone->signing);
signing != NULL;
signing = ISC_LIST_NEXT(signing, link))
dns_dbiterator_pause(signing->dbiterator);
/*
* Rollback the cleanup list.
*/
......@@ -8472,11 +8481,6 @@ zone_sign(dns_zone_t *zone) {
signing = ISC_LIST_HEAD(cleanup);
}
for (signing = ISC_LIST_HEAD(zone->signing);
signing != NULL;
signing = ISC_LIST_NEXT(signing, link))
dns_dbiterator_pause(signing->dbiterator);
dns_diff_clear(&_sig_diff);
for (i = 0; i < nkeys; i++)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment