summaryrefslogtreecommitdiffstats
path: root/ldap/servers/slapd
diff options
context:
space:
mode:
authorNoriko Hosoi <nhosoi@redhat.com>2009-02-13 00:16:32 +0000
committerNoriko Hosoi <nhosoi@redhat.com>2009-02-13 00:16:32 +0000
commit07bb0d48ebb67db1bb8fa365754b40778a881bc2 (patch)
treee3e84fc4f99680dddb5cbe24d70f8a780e639184 /ldap/servers/slapd
parenta7371944f0cc0b2e90fb4e98f53e20c933c92732 (diff)
downloadds-07bb0d48ebb67db1bb8fa365754b40778a881bc2.tar.gz
ds-07bb0d48ebb67db1bb8fa365754b40778a881bc2.tar.xz
ds-07bb0d48ebb67db1bb8fa365754b40778a881bc2.zip
Resolves: #485321
Summary: Entry cache: invalid counter usage Description: if new entry size is larger than old size, the delta is added to the cache size using slapi_counter_add; otherwise, the delta is subtracted from the cache size using slapi_counter_subtract.
Diffstat (limited to 'ldap/servers/slapd')
-rw-r--r--ldap/servers/slapd/back-ldbm/cache.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/ldap/servers/slapd/back-ldbm/cache.c b/ldap/servers/slapd/back-ldbm/cache.c
index c95c7867..84e935c9 100644
--- a/ldap/servers/slapd/back-ldbm/cache.c
+++ b/ldap/servers/slapd/back-ldbm/cache.c
@@ -865,7 +865,11 @@ int cache_replace(struct cache *cache, struct backentry *olde,
/* adjust cache meta info */
newe->ep_refcnt = 1;
newe->size = cache_entry_size(newe);
- slapi_counter_add(cache->c_cursize, newe->size - olde->size);
+ if (newe->size > olde->size) {
+ slapi_counter_add(cache->c_cursize, newe->size - olde->size);
+ } else if (newe->size < olde->size) {
+ slapi_counter_subtract(cache->c_cursize, olde->size - newe->size);
+ }
olde->ep_state = ENTRY_STATE_DELETED;
newe->ep_state = 0;
PR_Unlock(cache->c_mutex);