Dan.Oscarsson@tietoenator.com wrote:
If this looks correct to you, what code should I add to fix it? It would be better if one of you who knows the code better than me could do that. I can test and see if it works.
I hope this is the only place in cache handling of an entries children, though maybe someone with better knowledge on the code can identify others.
Hope this is the bug as I have used many days to trace it down and need to do some normal work for my company.
Thanks for your investigation; this explanation makes sense. You can test this simply by disabling the statement in bdb_cache_modrdn() which sets the NO_KIDS flags:
Index: cache.c =================================================================== RCS file: /repo/OpenLDAP/pkg/ldap/servers/slapd/back-bdb/cache.c,v retrieving revision 1.157 diff -u -r1.157 cache.c --- cache.c 12 Nov 2007 10:41:45 -0000 1.157 +++ cache.c 20 Nov 2007 15:09:29 -0000 @@ -1148,8 +1148,10 @@ free( ei->bei_nrdn.bv_val ); ber_dupbv( &ei->bei_nrdn, nrdn );
+#if 0 if ( !pei->bei_kids ) pei->bei_state |= CACHE_ENTRY_NO_KIDS | CACHE_ENTRY_NO_GRANDKIDS; +#endif
#ifdef BDB_HIER free( ei->bei_rdn.bv_val );
Please try that and report your results. I don't think this is the best fix, but if it helps your test then we can refine it from there.