From a2a5ef48be0bf8de2147cd23a03706c458367aa8 Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Wed, 12 Mar 2003 21:18:39 +0000 Subject: [PATCH] ITS#2368 - fix deleting key from range IDL --- servers/slapd/back-bdb/idl.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/servers/slapd/back-bdb/idl.c b/servers/slapd/back-bdb/idl.c index 0b38ae96b1..5d7f321857 100644 --- a/servers/slapd/back-bdb/idl.c +++ b/servers/slapd/back-bdb/idl.c @@ -850,20 +850,17 @@ bdb_idl_delete_key( /* It's a range, see if we need to rewrite * the boundaries */ - hi = 0; data.data = &lo; rc = cursor->c_get( cursor, key, &data, DB_NEXT_DUP ); if ( rc != 0 ) { err = "c_get lo"; goto fail; } - if ( id > lo ) { - data.data = &hi; - rc = cursor->c_get( cursor, key, &data, DB_NEXT_DUP ); - if ( rc != 0 ) { - err = "c_get hi"; - goto fail; - } + data.data = &hi; + rc = cursor->c_get( cursor, key, &data, DB_NEXT_DUP ); + if ( rc != 0 ) { + err = "c_get hi"; + goto fail; } if ( id == lo || id == hi ) { if ( id == lo ) { @@ -881,6 +878,12 @@ bdb_idl_delete_key( goto fail; } } else { + if ( id == lo ) { + /* reposition on lo slot */ + data.data = &lo; + cursor->c_get( cursor, key, &data, DB_PREV ); + lo = id; + } rc = cursor->c_del( cursor, 0 ); if ( rc != 0 ) { err = "c_del";