From b3ddb5734beb2c3fd70fe210148ca525941ae7ce Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Fri, 23 Aug 2002 03:07:33 +0000 Subject: [PATCH] Fix indexing bug in splitting indirect blocks --- servers/slapd/back-ldbm/idl.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/servers/slapd/back-ldbm/idl.c b/servers/slapd/back-ldbm/idl.c index a070f46adf..8bfc916463 100644 --- a/servers/slapd/back-ldbm/idl.c +++ b/servers/slapd/back-ldbm/idl.c @@ -48,17 +48,29 @@ static void cont_free( Datum *cont ) #ifdef LDBM_DEBUG_IDL static void idl_check(ID_BLOCK *idl) { - int i; + int i, max; ID_BLOCK last; - if( ID_BLOCK_INDIRECT(idl) || ID_BLOCK_ALLIDS(idl) - || ID_BLOCK_NIDS(idl) <= 1 ) + if( ID_BLOCK_ALLIDS(idl) ) + { + return; + } +#ifndef USE_INDIRECT_NIDS + if( ID_BLOCK_INDIRECT(idl) ) + { + for ( max = 0; !ID_BLOCK_BOID(idl, max); max++ ) ; + } else +#endif + { + max = ID_BLOCK_NIDS(idl); + } + if ( max <= 1 ) { return; } for( last = ID_BLOCK_ID(idl, 0), i = 1; - i < ID_BLOCK_NIDS(idl); + i < max; last = ID_BLOCK_ID(idl, i), i++ ) { assert (last < ID_BLOCK_ID(idl, i) ); @@ -628,7 +640,7 @@ idl_insert_key( #endif /* read it in */ cont_alloc( &k2, &key ); - cont_id( &k2, ID_BLOCK_ID(idl, i) ); + cont_id( &k2, ID_BLOCK_ID(idl, i + 1) ); if ( (tmp2 = idl_fetch_one( be, db, k2 )) == NULL ) { #ifdef NEW_LOGGING LDAP_LOG( INDEX, ERR, -- 2.39.5