]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-bdb/idl.c
Set lock detector to DEFAULT, not NORUN.
[openldap] / servers / slapd / back-bdb / idl.c
index de1bf459f521055259415697f32cbfa8e2885664..a4b010b5f923cd056be0433991739d6431cc8d6d 100644 (file)
@@ -236,18 +236,21 @@ bdb_idl_fetch_key(
                void *ptr;
                size_t len;
                int rc2;
+               int flags = bdb->bi_db_opflags | DB_MULTIPLE;
                data.data = buf;
                data.ulen = BDB_IDL_UM_SIZEOF;
                data.flags = DB_DBT_USERMEM;
 
+               if ( tid )
+                       flags |= DB_RMW;
+
                rc = db->cursor( db, tid, &cursor, bdb->bi_db_opflags );
                if( rc != 0 ) {
                        Debug( LDAP_DEBUG_ANY, "=> bdb_idl_fetch_key: "
                                "cursor failed: %s (%d)\n", db_strerror(rc), rc, 0 );
                        return rc;
                }
-               rc = cursor->c_get( cursor, key, &data, bdb->bi_db_opflags |
-                       DB_SET | DB_MULTIPLE );
+               rc = cursor->c_get( cursor, key, &data, flags | DB_SET );
                if (rc == 0) {
                        i = ids;
                        while (rc == 0) {
@@ -259,8 +262,7 @@ bdb_idl_fetch_key(
                                                AC_MEMCPY( i, j, sizeof(ID) );
                                        }
                                }
-                               rc = cursor->c_get( cursor, key, &data, bdb->bi_db_opflags |
-                                       DB_NEXT_DUP | DB_MULTIPLE );
+                               rc = cursor->c_get( cursor, key, &data, flags | DB_NEXT_DUP );
                        }
                        if ( rc == DB_NOTFOUND ) rc = 0;
                        ids[0] = i - ids;
@@ -381,7 +383,7 @@ bdb_idl_insert_key(
                                } else {
                                        data.data = buf+2;
                                }
-                               rc = cursor->c_get( cursor, key, &data, DB_GET_BOTH );
+                               rc = cursor->c_get( cursor, key, &data, DB_GET_BOTH | DB_RMW );
                                if ( rc != 0 ) {
                                        err = "c_get";
 fail:                          Debug( LDAP_DEBUG_ANY, "=> bdb_idl_insert_key: "