From 85bc1101cd1939ed01bdc0b170ee888f2f61996d Mon Sep 17 00:00:00 2001
From: Quanah Gibson-Mount <quanah@openldap.org>
Date: Thu, 5 Mar 2009 19:47:37 +0000
Subject: [PATCH] Fix prev commit

---
 servers/slapd/back-bdb/cache.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/servers/slapd/back-bdb/cache.c b/servers/slapd/back-bdb/cache.c
index 6eddd00856..671e36b2e7 100644
--- a/servers/slapd/back-bdb/cache.c
+++ b/servers/slapd/back-bdb/cache.c
@@ -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++;
-- 
GitLab