From 0340a1f1bf9674db287352b37d68e289f4ba700c Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Tue, 18 Jul 2006 10:22:48 +0000 Subject: [PATCH] ITS#4616 fix cache_modrdn bei_state management --- servers/slapd/back-bdb/cache.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/servers/slapd/back-bdb/cache.c b/servers/slapd/back-bdb/cache.c index e12dd34cca..d82536dd22 100644 --- a/servers/slapd/back-bdb/cache.c +++ b/servers/slapd/back-bdb/cache.c @@ -1016,6 +1016,10 @@ bdb_cache_modrdn( avl_delete( &pei->bei_kids, (caddr_t) ei, bdb_rdn_cmp ); free( ei->bei_nrdn.bv_val ); ber_dupbv( &ei->bei_nrdn, nrdn ); + + if ( !pei->bei_kids ) + pei->bei_state |= CACHE_ENTRY_NO_KIDS | CACHE_ENTRY_NO_GRANDKIDS; + #ifdef BDB_HIER free( ei->bei_rdn.bv_val ); @@ -1035,7 +1039,16 @@ bdb_cache_modrdn( bdb_cache_entryinfo_unlock( pei ); bdb_cache_entryinfo_lock( ein ); } + /* parent now has kids */ + if ( ein->bei_state & CACHE_ENTRY_NO_KIDS ) + ein->bei_state ^= CACHE_ENTRY_NO_KIDS; + #ifdef BDB_HIER + /* parent might now have grandkids */ + if ( ein->bei_state & CACHE_ENTRY_NO_GRANDKIDS && + !(ei->bei_state & (CACHE_ENTRY_NO_KIDS))) + ein->bei_state ^= CACHE_ENTRY_NO_GRANDKIDS; + { /* Record the generation number of this change */ ldap_pvt_thread_mutex_lock( &bdb->bi_modrdns_mutex ); -- 2.39.5