]> git.sur5r.net Git - openldap/commitdiff
ITS#6360
authorQuanah Gibson-Mount <quanah@openldap.org>
Wed, 4 Nov 2009 16:47:44 +0000 (16:47 +0000)
committerQuanah Gibson-Mount <quanah@openldap.org>
Wed, 4 Nov 2009 16:47:44 +0000 (16:47 +0000)
CHANGES
servers/slapd/back-bdb/cache.c

diff --git a/CHANGES b/CHANGES
index 543ff3a519871f0c78d25eb4522ff8d8e0986769..edbfcfcc3e8fc4916e4604f895a8fc5df8019674 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -12,7 +12,8 @@ OpenLDAP 2.4.20 Engineering
        Fixed slapd debug handling of LDAP_DEBUG_ANY (ITS#6324)
        Fixed slapd termination for one level DNs (ITS#6338)
        Fixed slapd unused parameter (ITS#6356)
-       Fixed slapd-bdb cache corruption (ITS#6341)
+       Fixed slapd-bdb/hdb cache corruption (ITS#6341)
+       Fixed slapd-bdb/hdb entry cache (ITS#6360)
        Fixed slapd-ldap leak (ITS#6326)
        Fixed slapd-relay bind segfault (ITS#6337)
        Fixed slapo-memberof operational attr updates (ITS#6329)
index fab4b1e09ede616cac430e7e83a422379f023feb..4e5636f73b57aba4a7954586316eef50d43f001d 100644 (file)
@@ -972,6 +972,9 @@ load1:
                                 */
                                if ( (*eip)->bei_state & CACHE_ENTRY_NOT_CACHED ) {
                                        (*eip)->bei_state &= ~CACHE_ENTRY_NOT_CACHED;
+                                       ldap_pvt_thread_mutex_lock( &bdb->bi_cache.c_count_mutex );
+                                       ++bdb->bi_cache.c_cursize;
+                                       ldap_pvt_thread_mutex_unlock( &bdb->bi_cache.c_count_mutex );
                                }
                                flag &= ~ID_NOCACHE;
                        }
@@ -1069,20 +1072,17 @@ load1:
        if ( rc == 0 ) {
                int purge = 0;
 
-               if ( bdb->bi_cache.c_cursize > bdb->bi_cache.c_maxsize ||
-                       ( bdb->bi_cache.c_eimax && bdb->bi_cache.c_leaves > bdb->bi_cache.c_eimax )) {
+               if (( load && !( flag & ID_NOCACHE )) || bdb->bi_cache.c_eimax ) {
                        ldap_pvt_thread_mutex_lock( &bdb->bi_cache.c_count_mutex );
-                       if ( !bdb->bi_cache.c_purging ) {
-                               if ( load && !( flag & ID_NOCACHE )) {
-                                       bdb->bi_cache.c_cursize++;
-                                       if ( bdb->bi_cache.c_cursize > bdb->bi_cache.c_maxsize ) {
-                                               purge = 1;
-                                               bdb->bi_cache.c_purging = 1;
-                                       }
-                               } else if ( bdb->bi_cache.c_eimax && bdb->bi_cache.c_leaves > bdb->bi_cache.c_eimax ) {
+                       if ( load && !( flag & ID_NOCACHE )) {
+                               bdb->bi_cache.c_cursize++;
+                               if ( !bdb->bi_cache.c_purging && bdb->bi_cache.c_cursize > bdb->bi_cache.c_maxsize ) {
                                        purge = 1;
                                        bdb->bi_cache.c_purging = 1;
                                }
+                       } else if ( !bdb->bi_cache.c_purging && bdb->bi_cache.c_eimax && bdb->bi_cache.c_leaves > bdb->bi_cache.c_eimax ) {
+                               purge = 1;
+                               bdb->bi_cache.c_purging = 1;
                        }
                        ldap_pvt_thread_mutex_unlock( &bdb->bi_cache.c_count_mutex );
                }