From: Howard Chu Date: Thu, 4 Jan 2007 03:14:46 +0000 (+0000) Subject: Fix idl_cache teardown again - skip if cache is empty X-Git-Tag: OPENLDAP_REL_ENG_2_4_4ALPHA~8^2~267 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=831d1cccc72e1ba3b3f2524ab56786ec626fb53b;p=openldap Fix idl_cache teardown again - skip if cache is empty --- diff --git a/servers/slapd/back-bdb/init.c b/servers/slapd/back-bdb/init.c index 018a741421..8d8df564fd 100644 --- a/servers/slapd/back-bdb/init.c +++ b/servers/slapd/back-bdb/init.c @@ -71,8 +71,7 @@ bdb_db_init( BackendDB *be ) #ifdef BDB_HIER ldap_pvt_thread_mutex_init( &bdb->bi_modrdns_mutex ); #endif - ldap_pvt_thread_mutex_init( &bdb->bi_cache.lru_head_mutex ); - ldap_pvt_thread_mutex_init( &bdb->bi_cache.lru_tail_mutex ); + ldap_pvt_thread_mutex_init( &bdb->bi_cache.lru_mutex ); ldap_pvt_thread_mutex_init( &bdb->bi_cache.c_count_mutex ); ldap_pvt_thread_mutex_init( &bdb->bi_cache.c_eifree_mutex ); ldap_pvt_thread_mutex_init( &bdb->bi_cache.c_dntree.bei_kids_mutex ); @@ -476,16 +475,18 @@ bdb_db_close( BackendDB *be ) if ( bdb->bi_idl_cache_max_size ) { avl_free( bdb->bi_idl_tree, NULL ); bdb->bi_idl_tree = NULL; - entry = bdb->bi_idl_lru_head; - do { - next_entry = entry->idl_lru_next; - if ( entry->idl ) - free( entry->idl ); - free( entry->kstr.bv_val ); - free( entry ); - entry = next_entry; - } while ( entry != bdb->bi_idl_lru_head ); - bdb->bi_idl_lru_head = bdb->bi_idl_lru_tail = NULL; + if ( bdb->bi_idl_lru_head ) { + entry = bdb->bi_idl_lru_head; + do { + next_entry = entry->idl_lru_next; + if ( entry->idl ) + free( entry->idl ); + free( entry->kstr.bv_val ); + free( entry ); + entry = next_entry; + } while ( entry != bdb->bi_idl_lru_head ); + bdb->bi_idl_lru_head = bdb->bi_idl_lru_tail = NULL; + } } /* close db environment */ @@ -542,8 +543,7 @@ bdb_db_destroy( BackendDB *be ) bdb_attr_index_destroy( bdb ); ldap_pvt_thread_rdwr_destroy ( &bdb->bi_cache.c_rwlock ); - ldap_pvt_thread_mutex_destroy( &bdb->bi_cache.lru_head_mutex ); - ldap_pvt_thread_mutex_destroy( &bdb->bi_cache.lru_tail_mutex ); + ldap_pvt_thread_mutex_destroy( &bdb->bi_cache.lru_mutex ); ldap_pvt_thread_mutex_destroy( &bdb->bi_cache.c_count_mutex ); ldap_pvt_thread_mutex_destroy( &bdb->bi_cache.c_eifree_mutex ); ldap_pvt_thread_mutex_destroy( &bdb->bi_cache.c_dntree.bei_kids_mutex );