瀏覽代碼

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.

Noriko Hosoi 17 年之前
父節點
當前提交
07bb0d48eb
共有 1 個文件被更改,包括 5 次插入1 次删除
  1. 5 1
      ldap/servers/slapd/back-ldbm/cache.c

+ 5 - 1
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);