Skip to content
Snippets Groups Projects
Commit 0eac91fc authored by Kurt Zeilenga's avatar Kurt Zeilenga
Browse files

Entry rwlock is no longer needed as concurrency is managed

by the giant rwlock.
parent 7c6afdf7
No related branches found
Tags OPENLDAP_REL_ENG_1_1_0
No related merge requests found
......@@ -19,7 +19,9 @@
/* LDBM backend specific entry info -- visible only to the cache */
typedef struct ldbm_entry_info {
#ifdef LDBM_ENTRY_RWLOCK
ldap_pvt_thread_rdwr_t lei_rdwr; /* reader/writer lock */
#endif
/*
* remaining fields require backend cache lock to access
......@@ -45,6 +47,7 @@ static int cache_delete_entry_internal(Cache *cache, Entry *e);
static void lru_print(Cache *cache);
#endif
#ifdef LDBM_ENTRY_RWLOCK
static int
cache_entry_rdwr_lock(Entry *e, int rw)
{
......@@ -113,6 +116,7 @@ cache_entry_rdwr_destroy(Entry *e)
{
return ldap_pvt_thread_rdwr_destroy( &LEI(e)->lei_rdwr );
}
#endif
static int
cache_entry_private_init( Entry*e )
......@@ -126,11 +130,13 @@ cache_entry_private_init( Entry*e )
e->e_private = ch_calloc(1, sizeof(struct ldbm_entry_info));
#ifdef LDBM_ENTRY_RWLOCK
if( cache_entry_rdwr_init( e ) != 0 ) {
free( LEI(e) );
e->e_private = NULL;
return 1;
}
#endif
return 0;
}
......@@ -157,7 +163,9 @@ cache_entry_private_destroy( Entry*e )
{
assert( e->e_private );
#ifdef LDBM_ENTRY_RWLOCK
cache_entry_rdwr_destroy( e );
#endif
free( e->e_private );
e->e_private = NULL;
......@@ -175,7 +183,9 @@ cache_return_entry_rw( Cache *cache, Entry *e, int rw )
assert( e->e_private );
#ifdef LDBM_ENTRY_RWLOCK
cache_entry_rdwr_unlock(e, rw);
#endif
id = e->e_id;
refcnt = --LEI(e)->lei_refcnt;
......@@ -367,8 +377,6 @@ cache_add_entry_rw(
e->e_id, e->e_dn, 0 );
#endif
/* delete from dn tree inserted above */
if ( avl_delete( &cache->c_dntree, (caddr_t) e,
(AVL_CMP) entry_dn_cmp ) == NULL )
......@@ -381,7 +389,6 @@ cache_add_entry_rw(
Debug( LDAP_DEBUG_ANY, "====> can't delete from dn cache\n",
0, 0, 0 );
#endif
}
cache_entry_private_destroy(e);
......@@ -391,7 +398,9 @@ cache_add_entry_rw(
return( -1 );
}
#ifdef LDBM_ENTRY_RWLOCK
cache_entry_rdwr_lock( e, rw );
#endif
/* put the entry into 'CREATING' state */
/* will be marked after when entry is returned */
......@@ -711,6 +720,7 @@ try_again:
goto try_again;
}
#ifdef LDBM_ENTRY_RWLOCK
/* acquire reader lock */
if ( cache_entry_rdwr_trylock(ep, rw) == LDAP_PVT_THREAD_EBUSY ) {
/* could not acquire entry lock...
......@@ -735,6 +745,7 @@ try_again:
ldap_pvt_thread_yield();
goto try_again;
}
#endif
/* lru */
LRU_DELETE( cache, ep );
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment