]> git.sur5r.net Git - openldap/commitdiff
More for ITS#5860, always check cache sizes
authorHoward Chu <hyc@openldap.org>
Wed, 18 Mar 2009 08:52:38 +0000 (08:52 +0000)
committerHoward Chu <hyc@openldap.org>
Wed, 18 Mar 2009 08:52:38 +0000 (08:52 +0000)
servers/slapd/back-bdb/cache.c

index 7cd34038b1f2f2c047742fc170890af6e873943c..b6dbaa651f9033a49ff26cdcc90b40b84c709854 100644 (file)
@@ -831,7 +831,7 @@ bdb_cache_find_id(
 {
        struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private;
        Entry   *ep = NULL;
-       int     rc = 0, load = 0, added = 0;
+       int     rc = 0, load = 0;
        EntryInfo ei = { 0 };
 
        ei.bei_id = id;
@@ -929,7 +929,6 @@ load1:
                                 */
                                if ( (*eip)->bei_state & CACHE_ENTRY_NOT_CACHED ) {
                                        (*eip)->bei_state &= ~CACHE_ENTRY_NOT_CACHED;
-                                       added = 1;
                                }
                                flag &= ~ID_NOCACHE;
                        }
@@ -958,7 +957,6 @@ load1:
 #endif
                                                ep = NULL;
                                                bdb_cache_lru_link( bdb, *eip );
-                                               added = 1;
                                                if (( flag & ID_NOCACHE ) &&
                                                        ( bdb_cache_entryinfo_trylock( *eip ) == 0 )) {
                                                        /* Set the cached state only if no other thread
@@ -1023,7 +1021,8 @@ load1:
        if ( rc == 0 ) {
                int purge = 0;
 
-               if ( added ) {
+               if ( bdb->bi_cache.c_cursize > bdb->bi_cache.c_maxsize ||
+                       bdb->bi_cache.c_leaves > bdb->bi_cache.c_eimax ) {
                        ldap_pvt_thread_mutex_lock( &bdb->bi_cache.c_count_mutex );
                        if ( !( flag & ID_NOCACHE )) {
                                bdb->bi_cache.c_cursize++;