+4107. [bug] Address potential deadlock when updating zone content.
+ [RT #39269]
+
4106. [port] Improve readline support. [RT #38938]
4105. [port] Misc fixes for Microsoft Visual Studio
unsigned int count, length;
dns_rbtdb_t *rbtdb = (dns_rbtdb_t *)db;
+ RWLOCK(&rbtdb->tree_lock, isc_rwlocktype_read);
version->havensec3 = ISC_FALSE;
node = rbtdb->origin_node;
NODE_LOCK(&(rbtdb->node_locks[node->locknum].lock),
unlock:
NODE_UNLOCK(&(rbtdb->node_locks[node->locknum].lock),
isc_rwlocktype_read);
+ RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_read);
}
static void
goto end;
}
+ /*
+ * Update the zone's secure status in version before making
+ * it the current version.
+ */
+ if (version->writer && commit && !IS_CACHE(rbtdb))
+ iszonesecure(db, version, rbtdb->origin_node);
+
RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_write);
serial = version->serial;
if (version->writer) {
cleanup_version->changed_list,
link);
}
- /*
- * Update the zone's secure status.
- */
- if (!IS_CACHE(rbtdb))
- iszonesecure(db, version, rbtdb->origin_node);
/*
* Become the current version.
*/