]> git.sur5r.net Git - openldap/commitdiff
Import Mark's ITS#1359 indexing bug fix
authorKurt Zeilenga <kurt@openldap.org>
Thu, 11 Oct 2001 18:49:37 +0000 (18:49 +0000)
committerKurt Zeilenga <kurt@openldap.org>
Thu, 11 Oct 2001 18:49:37 +0000 (18:49 +0000)
CHANGES
servers/slapd/back-ldbm/back-ldbm.h
servers/slapd/back-ldbm/dbcache.c
servers/slapd/back-ldbm/dn2id.c
servers/slapd/back-ldbm/key.c

diff --git a/CHANGES b/CHANGES
index 9ca3d0da6001423f2bb17051de52147d83ce5d7b..66f49603fa306e16f391897aaea99c6ffed8b5c9 100644 (file)
--- 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)
index 74cf0e9b2ceac81fc2d664ba5fceac0d08cdbee7..7fb04071c6510d04f3a73d3bb209ff837ac5c3ea 100644 (file)
@@ -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
index 3876bbb5217e007bd3e2137e688d4ca528f3014a..36e19e9771e6fa22f41337335df945d5720cd5bb 100644 (file)
@@ -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 );
 }
index 0430a3f64b88dd55d5b7841b0722724eeac9868b..2c596e9e3daa895830c92f99653a5aa1a6ac3195 100644 (file)
@@ -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 );
                        }
index c8dc26e6903e189a28a956f2a14dc97604403fad..a899308f03180b4fb3f432dd9e8635224e68fc7b 100644 (file)
@@ -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 );