From: Kurt Zeilenga Date: Wed, 1 Sep 1999 18:30:13 +0000 (+0000) Subject: Fix idl_insert_key() return codes. X-Git-Tag: TWEB_OL_BASE~50 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=6b80f345a4e53c89b708d96c553eaa6f131ab2fd;p=openldap Fix idl_insert_key() return codes. --- diff --git a/servers/slapd/back-ldbm/idl.c b/servers/slapd/back-ldbm/idl.c index 9fc5011b1f..4f61a0b472 100644 --- a/servers/slapd/back-ldbm/idl.c +++ b/servers/slapd/back-ldbm/idl.c @@ -471,7 +471,8 @@ idl_insert_key( rc = idl_change_first( be, db, key, idl, i, k2, tmp ); break; - case 2: /* id not inserted - already there */ + case 2: /* id not inserted - already there, do nothing */ + rc = 0; break; case 3: /* id not inserted - block is full */ @@ -492,7 +493,8 @@ idl_insert_key( Debug( LDAP_DEBUG_ANY, "idl_fetch_one (%s) returns NULL\n", k2.dptr, 0, 0 ); - break; + /* split the original block */ + goto split; } switch ( (rc = idl_insert( &tmp2, id, @@ -518,14 +520,19 @@ idl_insert_key( case 3: /* split the original block */ break; } + idl_free( tmp2 ); } +split: /* * must split the block, write both new blocks + update * and write the indirect header block. */ + rc = 0; /* optimistic */ + + /* count how many indirect blocks *//* XXX linear count XXX */ for ( j = 0; !ID_BLOCK_NOID(idl, j); j++ ) ; /* NULL */