Hello,

JINMEI Tatuya / 神明達哉 schrieb:
> Second, if you can run test code, please apply the attached patch to
> 9.4.0b2, rebuild name (do NOT specify --disable-atomic), and see if
> the bug is reproduced. The patch does not include any fix, but some
> stronger assertion checks that may reveal the real point of the bug.
>
> Thanks,
>
> JINMEI, Tatuya
> Communication Platform Lab.
> Corporate R&D Center, Toshiba Corp.
> jinmei@isl.rdc.toshiba.co.jp
> --- rbtdb.c.orig Tue Oct 10 23:35:40 2006
> +++ rbtdb.c Tue Oct 10 23:36:58 2006
> @@ -837,8 +837,8 @@
> REQUIRE(version->writer);
>
> if (changed != NULL) {
> - dns_rbtnode_refincrement0(node, &refs);
> - INSIST(refs > 0);
> + dns_rbtnode_refincrement(node, &refs);
> + INSIST(refs != 0);
> changed->node = node;
> changed->dirty = ISC_FALSE;
> ISC_LIST_INITANDAPPEND(version->changed_list, changed, link);
> @@ -1125,6 +1125,7 @@
> isc_refcount_increment0(lockref, &lockrefs);
> INSIST(lockrefs != 0);
> }
> + INSIST(isc_refcount_current(&rbtdb->node_locks[node->locknum].references));
> INSIST(noderefs != 0);
> }
>
> @@ -3824,8 +3825,8 @@
> REQUIRE(targetp != NULL && *targetp == NULL);
>
> NODE_STRONGLOCK(&rbtdb->node_locks[node->locknum].lock);
> - dns_rbtnode_refincrement0(node, &refs);
> - INSIST(refs > 1);
> + dns_rbtnode_refincrement(node, &refs);
> + INSIST(refs != 0);
> NODE_STRONGUNLOCK(&rbtdb->node_locks[node->locknum].lock);
>
> *targetp = source;
> @@ -4285,8 +4286,8 @@
>
> NODE_STRONGLOCK(&rbtdb->node_locks[rbtnode->locknum].lock);
>
> - dns_rbtnode_refincrement0(rbtnode, &refs);
> - INSIST(refs > 0);
> + dns_rbtnode_refincrement(rbtnode, &refs);
> + INSIST(refs != 0);
>
> iterator->current = NULL;
>
> @@ -6332,9 +6333,12 @@
> * expirenode() currently always returns success.
> */
> if (expire_result == ISC_R_SUCCESS && node->down == NULL) {
> + unsigned int refs;
> +
> rbtdbiter->deletions[rbtdbiter->delete++] = node;
> NODE_STRONGLOCK(&rbtdb->node_locks[node->locknum].lock);
> - dns_rbtnode_refincrement0(node, NULL);
> + dns_rbtnode_refincrement(node, &refs);
> + INSIST(refs != 0);
> NODE_STRONGUNLOCK(&rbtdb->node_locks[node->locknum].lock);
> }
> }


I compiled using this patch and without --disable-atomic, unfortunately
named refused to start:

10-Oct-2006 19:28:22.894 general: rbtdb.c:1128: INSIST(((unsigned
int)((&rbtdb->node_locks[node->locknum].references)->ref
s))) failed
10-Oct-2006 19:28:22.894 general: exiting (due to assertion failure)

Thanks for your help, kind regards
--
_____________________________
[Marco Schumann