From: Howard Chu Date: Fri, 18 Jan 2002 13:29:10 +0000 (+0000) Subject: Use DB_RMW in idl_fetch_key if called as part of a txn. X-Git-Tag: LDBM_PRE_GIANT_RWLOCK~78 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=9f1591d5e92e42f6eaa64bbb905e4bbe5c835ad7;p=openldap Use DB_RMW in idl_fetch_key if called as part of a txn. --- diff --git a/servers/slapd/back-bdb/idl.c b/servers/slapd/back-bdb/idl.c index de1bf459f5..e6c65795c9 100644 --- a/servers/slapd/back-bdb/idl.c +++ b/servers/slapd/back-bdb/idl.c @@ -239,6 +239,10 @@ bdb_idl_fetch_key( data.data = buf; data.ulen = BDB_IDL_UM_SIZEOF; data.flags = DB_DBT_USERMEM; + int flags = bdb->bi_db_opflags | DB_MULTIPLE; + + if ( tid ) + flags |= DB_RMW; rc = db->cursor( db, tid, &cursor, bdb->bi_db_opflags ); if( rc != 0 ) { @@ -246,8 +250,7 @@ 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: "