mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-03-07 14:18:15 +08:00
Serialize access to idl insert/delete key routines (ITS 1359)
This commit is contained in:
parent
0229b76570
commit
290137a54f
@ -117,6 +117,7 @@ typedef struct ldbm_dbcache {
|
||||
long dbc_blksize;
|
||||
char *dbc_name;
|
||||
LDBM dbc_db;
|
||||
ldap_pvt_thread_mutex_t dbc_write_mutex;
|
||||
} DBCache;
|
||||
|
||||
#define MAXDBCACHE 128
|
||||
|
@ -207,6 +207,8 @@ ldbm_cache_open(
|
||||
Debug( LDAP_DEBUG_TRACE, "<= ldbm_cache_open (opened %d)\n", i, 0, 0 );
|
||||
#endif
|
||||
|
||||
ldap_pvt_thread_mutex_init( &li->li_dbcache[i].dbc_write_mutex );
|
||||
|
||||
ldap_pvt_thread_mutex_unlock( &li->li_dbcache_mutex );
|
||||
return( &li->li_dbcache[i] );
|
||||
}
|
||||
@ -241,6 +243,7 @@ ldbm_cache_really_close( Backend *be, DBCache *db )
|
||||
ldbm_close( db->dbc_db );
|
||||
free( db->dbc_name );
|
||||
db->dbc_name = NULL;
|
||||
ldap_pvt_thread_mutex_destroy( &db->dbc_write_mutex );
|
||||
}
|
||||
ldap_pvt_thread_mutex_unlock( &li->li_dbcache_mutex );
|
||||
}
|
||||
|
@ -72,7 +72,9 @@ dn2id_add(
|
||||
key.dsize = strlen( pdn ) + 2;
|
||||
key.dptr = ch_malloc( key.dsize );
|
||||
sprintf( key.dptr, "%c%s", DN_ONE_PREFIX, pdn );
|
||||
ldap_pvt_thread_mutex_lock( &db->dbc_write_mutex );
|
||||
rc = idl_insert_key( be, db, key, id );
|
||||
ldap_pvt_thread_mutex_unlock( &db->dbc_write_mutex );
|
||||
free( key.dptr );
|
||||
free( pdn );
|
||||
}
|
||||
@ -89,9 +91,9 @@ dn2id_add(
|
||||
key.dptr = ch_malloc( key.dsize );
|
||||
sprintf( key.dptr, "%c%s",
|
||||
DN_SUBTREE_PREFIX, subtree[i] );
|
||||
|
||||
ldap_pvt_thread_mutex_lock( &db->dbc_write_mutex );
|
||||
rc = idl_insert_key( be, db, key, id );
|
||||
|
||||
ldap_pvt_thread_mutex_unlock( &db->dbc_write_mutex );
|
||||
free( key.dptr );
|
||||
|
||||
if(rc == -1) break;
|
||||
@ -298,7 +300,9 @@ dn2id_delete(
|
||||
key.dptr = ch_malloc( key.dsize );
|
||||
sprintf( key.dptr, "%c%s", DN_ONE_PREFIX, pdn );
|
||||
|
||||
ldap_pvt_thread_mutex_lock( &db->dbc_write_mutex );
|
||||
(void) idl_delete_key( be, db, key, id );
|
||||
ldap_pvt_thread_mutex_unlock( &db->dbc_write_mutex );
|
||||
|
||||
free( key.dptr );
|
||||
free( pdn );
|
||||
@ -317,7 +321,9 @@ dn2id_delete(
|
||||
sprintf( key.dptr, "%c%s",
|
||||
DN_SUBTREE_PREFIX, subtree[i] );
|
||||
|
||||
ldap_pvt_thread_mutex_lock( &db->dbc_write_mutex );
|
||||
(void) idl_delete_key( be, db, key, id );
|
||||
ldap_pvt_thread_mutex_unlock( &db->dbc_write_mutex );
|
||||
|
||||
free( key.dptr );
|
||||
}
|
||||
|
@ -82,6 +82,7 @@ key_change(
|
||||
key.dptr = k->bv_val;
|
||||
key.dsize = k->bv_len;
|
||||
|
||||
ldap_pvt_thread_mutex_lock( &db->dbc_write_mutex );
|
||||
if (op == SLAP_INDEX_ADD_OP) {
|
||||
/* Add values */
|
||||
rc = idl_insert_key( be, db, key, id );
|
||||
@ -90,6 +91,7 @@ key_change(
|
||||
/* Delete values */
|
||||
rc = idl_delete_key( be, db, key, id );
|
||||
}
|
||||
ldap_pvt_thread_mutex_unlock( &db->dbc_write_mutex );
|
||||
|
||||
|
||||
#ifdef NEW_LOGGING
|
||||
|
Loading…
Reference in New Issue
Block a user