mirror of
https://github.com/isc-projects/bind9.git
synced 2026-06-11 08:30:00 -04:00
Merge branch '1350-threadsanitizer-data-race-rbt-c-1312-in-dns_rbt_addnode' into 'master'
Resolve "ThreadSanitizer: data race rbt.c:1312 in dns_rbt_addnode" Closes #1350 See merge request isc-projects/bind9!2648
This commit is contained in:
commit
2c0710d5e6
1 changed files with 21 additions and 3 deletions
|
|
@ -1728,6 +1728,9 @@ clean_zone_node(dns_rbtdb_t *rbtdb, dns_rbtnode_t *node,
|
|||
node->dirty = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* tree_lock(write) must be held.
|
||||
*/
|
||||
static void
|
||||
delete_node(dns_rbtdb_t *rbtdb, dns_rbtnode_t *node) {
|
||||
dns_rbtnode_t *nsecnode;
|
||||
|
|
@ -2652,6 +2655,8 @@ closeversion(dns_db_t *db, dns_dbversion_t **versionp, bool commit) {
|
|||
* E.g. if the wildcard name is "*.sub.example." then we
|
||||
* must ensure that "sub.example." exists and is marked as
|
||||
* a wildcard level.
|
||||
*
|
||||
* tree_lock(write) must be held.
|
||||
*/
|
||||
static isc_result_t
|
||||
add_wildcard_magic(dns_rbtdb_t *rbtdb, const dns_name_t *name) {
|
||||
|
|
@ -2676,6 +2681,9 @@ add_wildcard_magic(dns_rbtdb_t *rbtdb, const dns_name_t *name) {
|
|||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
|
||||
/*
|
||||
* tree_lock(write) must be held.
|
||||
*/
|
||||
static isc_result_t
|
||||
add_empty_wildcards(dns_rbtdb_t *rbtdb, const dns_name_t *name) {
|
||||
isc_result_t result;
|
||||
|
|
@ -6424,13 +6432,16 @@ addrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
|
|||
REQUIRE(VALID_RBTDB(rbtdb));
|
||||
INSIST(rbtversion == NULL || rbtversion->rbtdb == rbtdb);
|
||||
|
||||
if (rbtdb->common.methods == &zone_methods)
|
||||
if (rbtdb->common.methods == &zone_methods) {
|
||||
RWLOCK(&rbtdb->tree_lock, isc_rwlocktype_read);
|
||||
REQUIRE(((rbtnode->nsec == DNS_RBT_NSEC_NSEC3 &&
|
||||
(rdataset->type == dns_rdatatype_nsec3 ||
|
||||
rdataset->covers == dns_rdatatype_nsec3)) ||
|
||||
(rbtnode->nsec != DNS_RBT_NSEC_NSEC3 &&
|
||||
rdataset->type != dns_rdatatype_nsec3 &&
|
||||
rdataset->covers != dns_rdatatype_nsec3)));
|
||||
RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_read);
|
||||
}
|
||||
|
||||
if (rbtversion == NULL) {
|
||||
if (now == 0)
|
||||
|
|
@ -6521,11 +6532,15 @@ addrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
|
|||
/*
|
||||
* Add to the auxiliary NSEC tree if we're adding an NSEC record.
|
||||
*/
|
||||
RWLOCK(&rbtdb->tree_lock, isc_rwlocktype_read);
|
||||
if (rbtnode->nsec != DNS_RBT_NSEC_HAS_NSEC &&
|
||||
rdataset->type == dns_rdatatype_nsec)
|
||||
{
|
||||
newnsec = true;
|
||||
else
|
||||
} else {
|
||||
newnsec = false;
|
||||
}
|
||||
RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_read);
|
||||
|
||||
/*
|
||||
* If we're adding a delegation type, adding to the auxiliary NSEC tree,
|
||||
|
|
@ -6626,13 +6641,16 @@ subtractrdataset(dns_db_t *db, dns_dbnode_t *node, dns_dbversion_t *version,
|
|||
REQUIRE(VALID_RBTDB(rbtdb));
|
||||
REQUIRE(rbtversion != NULL && rbtversion->rbtdb == rbtdb);
|
||||
|
||||
if (rbtdb->common.methods == &zone_methods)
|
||||
if (rbtdb->common.methods == &zone_methods) {
|
||||
RWLOCK(&rbtdb->tree_lock, isc_rwlocktype_read);
|
||||
REQUIRE(((rbtnode->nsec == DNS_RBT_NSEC_NSEC3 &&
|
||||
(rdataset->type == dns_rdatatype_nsec3 ||
|
||||
rdataset->covers == dns_rdatatype_nsec3)) ||
|
||||
(rbtnode->nsec != DNS_RBT_NSEC_NSEC3 &&
|
||||
rdataset->type != dns_rdatatype_nsec3 &&
|
||||
rdataset->covers != dns_rdatatype_nsec3)));
|
||||
RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_read);
|
||||
}
|
||||
|
||||
result = dns_rdataslab_fromrdataset(rdataset, rbtdb->common.mctx,
|
||||
®ion, sizeof(rdatasetheader_t));
|
||||
|
|
|
|||
Loading…
Reference in a new issue