From: Kurt Zeilenga Date: Thu, 11 Oct 2001 18:49:37 +0000 (+0000) Subject: Import Mark's ITS#1359 indexing bug fix X-Git-Tag: OPENLDAP_REL_ENG_2_0_16~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dd0a05dc1764866f9d5d000ad9a40abc4dcd0e52;p=thirdparty%2Fopenldap.git Import Mark's ITS#1359 indexing bug fix --- diff --git a/CHANGES b/CHANGES index 9ca3d0da60..66f49603fa 100644 --- a/CHANGES +++ b/CHANGES @@ -1,8 +1,10 @@ OpenLDAP 2.0 Change Log OpenLDAP 2.0.16 Engineering + Fixed ITS indexing bug (ITS#1359, others) Fixed slapd/slurpd maxargs bug (ITS#1343) Fixed slapd ManageDSAIT warning + Fixed slapd no OID schema bug Fixed slurpd server down reject bug (ITS#1183) Fixed slurpd moddn newsup bug (ITS#1379) Fixed -llber ber_realloc bug (ITS#1346) diff --git a/servers/slapd/back-ldbm/back-ldbm.h b/servers/slapd/back-ldbm/back-ldbm.h index 74cf0e9b2c..7fb04071c6 100644 --- a/servers/slapd/back-ldbm/back-ldbm.h +++ b/servers/slapd/back-ldbm/back-ldbm.h @@ -97,6 +97,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 diff --git a/servers/slapd/back-ldbm/dbcache.c b/servers/slapd/back-ldbm/dbcache.c index 3876bbb521..36e19e9771 100644 --- a/servers/slapd/back-ldbm/dbcache.c +++ b/servers/slapd/back-ldbm/dbcache.c @@ -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 ); } diff --git a/servers/slapd/back-ldbm/dn2id.c b/servers/slapd/back-ldbm/dn2id.c index 0430a3f64b..2c596e9e3d 100644 --- a/servers/slapd/back-ldbm/dn2id.c +++ b/servers/slapd/back-ldbm/dn2id.c @@ -60,7 +60,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 ); } @@ -77,9 +79,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; @@ -230,7 +232,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 ); @@ -249,7 +253,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 ); } diff --git a/servers/slapd/back-ldbm/key.c b/servers/slapd/back-ldbm/key.c index c8dc26e690..a899308f03 100644 --- a/servers/slapd/back-ldbm/key.c +++ b/servers/slapd/back-ldbm/key.c @@ -62,6 +62,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 ); @@ -70,6 +71,7 @@ key_change( /* Delete values */ rc = idl_delete_key( be, db, key, id ); } + ldap_pvt_thread_mutex_unlock( &db->dbc_write_mutex ); Debug( LDAP_DEBUG_TRACE, "<= key_change %d\n", rc, 0, 0 );