From: Howard Chu Date: Tue, 10 Dec 2002 20:56:08 +0000 (+0000) Subject: Fix previous commit, check for dup in avl_insert X-Git-Tag: NO_SLAP_OP_BLOCKS~696 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=e39f9848ace9481e8ff723da10715286c3b42cd0;p=openldap Fix previous commit, check for dup in avl_insert --- diff --git a/servers/slapd/back-bdb/idl.c b/servers/slapd/back-bdb/idl.c index 58e6bd503c..adc2abbf11 100644 --- a/servers/slapd/back-bdb/idl.c +++ b/servers/slapd/back-bdb/idl.c @@ -469,19 +469,24 @@ bdb_idl_fetch_key( BDB_IDL_CPY( ee->idl, ids ); ber_dupbv( &ee->kstr, &idl_tmp.kstr ); ldap_pvt_thread_mutex_lock( &bdb->bi_idl_tree_mutex ); - avl_insert( &bdb->bi_idl_tree, (caddr_t) ee, (AVL_CMP) bdb_idl_entry_cmp, avl_dup_error ); - IDL_LRU_ADD( bdb, ee ); - if ( ++bdb->bi_idl_cache_size > bdb->bi_idl_cache_max_size ) { - int i = 0; - while ( bdb->bi_idl_lru_tail != NULL && i < 10 ) { - ee = bdb->bi_idl_lru_tail; - avl_delete( &bdb->bi_idl_tree, (caddr_t) ee, (AVL_CMP) bdb_idl_entry_cmp ); - IDL_LRU_DELETE( bdb, ee ); - i++; - --bdb->bi_idl_cache_size; - free( ee->kstr.bv_val ); - free( ee->idl ); - free( ee ); + if ( avl_insert( &bdb->bi_idl_tree, (caddr_t) ee, (AVL_CMP) bdb_idl_entry_cmp, avl_dup_error )) { + free( ee->kstr.bv_val ); + free( ee->idl ); + free( ee ); + } else { + IDL_LRU_ADD( bdb, ee ); + if ( ++bdb->bi_idl_cache_size > bdb->bi_idl_cache_max_size ) { + int i = 0; + while ( bdb->bi_idl_lru_tail != NULL && i < 10 ) { + ee = bdb->bi_idl_lru_tail; + avl_delete( &bdb->bi_idl_tree, (caddr_t) ee, (AVL_CMP) bdb_idl_entry_cmp ); + IDL_LRU_DELETE( bdb, ee ); + i++; + --bdb->bi_idl_cache_size; + free( ee->kstr.bv_val ); + free( ee->idl ); + free( ee ); + } } } ldap_pvt_thread_mutex_unlock( &bdb->bi_idl_tree_mutex );