From 1ccde69d778878e331311839d1c5d6be0bbfad26 Mon Sep 17 00:00:00 2001 From: Noriko Hosoi Date: Mon, 22 Sep 2014 14:34:58 -0700 Subject: [PATCH 09/14] Ticket #47750 - Creating a glue fails if one above level is a conflict or missing Description: Poring changes made to 1.2.11 branch to newer versions. 1) Enabiling cache lock in cache_is_in_cache and cache_has_otherref. 2) Removing unused field new_entry_in_cache from "struct _modify_context". (cherry picked from commit 5ae13072330e9a769a5949b2e8a91085b38ac4e1) (cherry picked from commit ef766784ed7d09aa81e82316b621e8490a368dc6) --- ldap/servers/slapd/back-ldbm/back-ldbm.h | 1 - ldap/servers/slapd/back-ldbm/cache.c | 10 ++++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/ldap/servers/slapd/back-ldbm/back-ldbm.h b/ldap/servers/slapd/back-ldbm/back-ldbm.h index 938d261..fd17453 100644 --- a/ldap/servers/slapd/back-ldbm/back-ldbm.h +++ b/ldap/servers/slapd/back-ldbm/back-ldbm.h @@ -705,7 +705,6 @@ typedef struct _import_subcount_stuff import_subcount_stuff; /* Handy structures for modify operations */ struct _modify_context { - int new_entry_in_cache; struct backentry *old_entry; struct backentry *new_entry; Slapi_Mods *smods; diff --git a/ldap/servers/slapd/back-ldbm/cache.c b/ldap/servers/slapd/back-ldbm/cache.c index a98cf0c..4746204 100644 --- a/ldap/servers/slapd/back-ldbm/cache.c +++ b/ldap/servers/slapd/back-ldbm/cache.c @@ -1506,10 +1506,12 @@ int cache_add_tentative(struct cache *cache, struct backentry *e, { return entrycache_add_int(cache, e, ENTRY_STATE_CREATING, alt); } + void cache_lock(struct cache *cache) { PR_EnterMonitor(cache->c_mutex); } + void cache_unlock(struct cache *cache) { PR_ExitMonitor(cache->c_mutex); @@ -2095,9 +2097,9 @@ cache_has_otherref(struct cache *cache, void *ptr) return hasref; } bep = (struct backcommon *)ptr; - /* slows down too much? PR_Lock(cache->c_mutex); */ + cache_lock(cache); hasref = bep->ep_refcnt; - /* PR_Unlock(cache->c_mutex); */ + cache_unlock(cache); return (hasref>1)?1:0; } @@ -2111,8 +2113,8 @@ cache_is_in_cache(struct cache *cache, void *ptr) return in_cache; } bep = (struct backcommon *)ptr; - /* slows down too much? PR_Lock(cache->c_mutex); */ + cache_lock(cache); in_cache = (bep->ep_state & (ENTRY_STATE_DELETED|ENTRY_STATE_NOTINCACHE))?0:1; - /* PR_Unlock(cache->c_mutex); */ + cache_unlock(cache); return in_cache; } -- 1.9.3