2975. [bug] rbtdb.c:cleanup_dead_nodes_callback() aquired the

wrong lock which could lead to server deadlock.
                        [RT #22614]
This commit is contained in:
Mark Andrews 2010-12-02 04:58:13 +00:00
parent 3a54e5ab6c
commit 97664670d0
2 changed files with 7 additions and 3 deletions

View file

@ -1,3 +1,7 @@
2975. [bug] rbtdb.c:cleanup_dead_nodes_callback() aquired the
wrong lock which could lead to server deadlock.
[RT #22614]
2974. [bug] Some vaild UPDATE requests could fail due to a
consistency check examining the existing version
of the zone rather than the new version resulting

View file

@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
/* $Id: rbtdb.c,v 1.306 2010/11/16 06:46:44 marka Exp $ */
/* $Id: rbtdb.c,v 1.307 2010/12/02 04:58:13 marka Exp $ */
/*! \file */
@ -2115,7 +2115,7 @@ cleanup_dead_nodes_callback(isc_task_t *task, isc_event_t *event) {
unsigned int locknum;
unsigned int refs;
RBTDB_LOCK(&rbtdb->lock, isc_rwlocktype_write);
RWLOCK(&rbtdb->tree_lock, isc_rwlocktype_write);
for (locknum = 0; locknum < rbtdb->node_lock_count; locknum++) {
NODE_LOCK(&rbtdb->node_locks[locknum].lock,
isc_rwlocktype_write);
@ -2125,7 +2125,7 @@ cleanup_dead_nodes_callback(isc_task_t *task, isc_event_t *event) {
NODE_UNLOCK(&rbtdb->node_locks[locknum].lock,
isc_rwlocktype_write);
}
RBTDB_UNLOCK(&rbtdb->lock, isc_rwlocktype_write);
RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_write);
if (again)
isc_task_send(task, &event);
else {