]> git.sur5r.net Git - openldap/commitdiff
Fix prev commit
authorQuanah Gibson-Mount <quanah@openldap.org>
Thu, 5 Mar 2009 19:47:37 +0000 (19:47 +0000)
committerQuanah Gibson-Mount <quanah@openldap.org>
Thu, 5 Mar 2009 19:47:37 +0000 (19:47 +0000)
servers/slapd/back-bdb/cache.c

index 6eddd00856cfc1cd8a68d02de4789aa411803229..671e36b2e7983b44fb3ddce5eff5e16ea71e20d5 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;
+       int     rc = 0, load = 0, added = 0;
        EntryInfo ei = { 0 };
 
        ei.bei_id = id;
@@ -927,7 +927,10 @@ load1:
                                 * loading it, i.e it is already cached or
                                 * another thread is currently loading it.
                                 */
-                               (*eip)->bei_state &= ~CACHE_ENTRY_NOT_CACHED;
+                               if ( (*eip)->bei_state & CACHE_ENTRY_NOT_CACHED ) {
+                                       (*eip)->bei_state &= ~CACHE_ENTRY_NOT_CACHED;
+                                       added = 1;
+                               }
                                flag &= ~ID_NOCACHE;
                        }
 
@@ -955,6 +958,7 @@ 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
@@ -1019,7 +1023,7 @@ load1:
        if ( rc == 0 ) {
                int purge = 0;
 
-               if ( load ) {
+               if ( added ) {
                        ldap_pvt_thread_mutex_lock( &bdb->bi_cache.c_count_mutex );
                        if ( !( flag & ID_NOCACHE )) {
                                bdb->bi_cache.c_cursize++;