From: Howard Chu Date: Tue, 18 Jul 2006 10:22:48 +0000 (+0000) Subject: ITS#4616 fix cache_modrdn bei_state management X-Git-Tag: OPENLDAP_REL_ENG_2_4_3ALPHA~9^2~48 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=0340a1f1bf9674db287352b37d68e289f4ba700c;p=openldap ITS#4616 fix cache_modrdn bei_state management --- 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 );