Dan.Oscarsson(a)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.
--
-- Howard Chu
Chief Architect, Symas Corp.
http://www.symas.com
Director, Highland Sun
http://highlandsun.com/hyc/
Chief Architect, OpenLDAP
http://www.openldap.org/project/