]> git.sur5r.net Git - openldap/commitdiff
Simpler fix for NO_THREADS
authorHoward Chu <hyc@openldap.org>
Thu, 19 Sep 2002 06:34:53 +0000 (06:34 +0000)
committerHoward Chu <hyc@openldap.org>
Thu, 19 Sep 2002 06:34:53 +0000 (06:34 +0000)
servers/slapd/back-bdb/back-bdb.h
servers/slapd/back-bdb/cache.c
servers/slapd/back-bdb/init.c
servers/slapd/back-bdb/proto-bdb.h

index 70e40712d8ee998b0451324bf5001da9aa47c558..56b41503300561624bc4527b0b6db2ae1445000d 100644 (file)
@@ -111,9 +111,6 @@ struct bdb_info {
        u_int32_t       bi_txn_cp_kbyte;
 
        int                     bi_lock_detect;
-#ifdef NO_THREADS
-       int             bi_locker_id;
-#endif
 
        ID                      bi_lastid;
        ldap_pvt_thread_mutex_t bi_lastid_mutex;
@@ -170,11 +167,8 @@ struct bdb_op_info {
 #define BDB_REUSE_LOCKERS
 
 #ifdef BDB_REUSE_LOCKERS
-/* Hack - we depend on "op" and "bdb" being the right variable names
- * in each invoker.
- */
 #define        LOCK_ID_FREE(env, locker)
-#define        LOCK_ID(env, locker)    bdb_locker_id(op, bdb, locker)
+#define        LOCK_ID(env, locker)    bdb_locker_id(op, env, locker)
 #else
 #define        LOCK_ID_FREE(env, locker)       XLOCK_ID_FREE(env, locker)
 #define        LOCK_ID(env, locker)            XLOCK_ID(env, locker)
index 8baf1e710bffcb84d57fd941985881af3c41cf9d..a2e43e0db9545dd2142a3d407a998d8adec30904 100644 (file)
@@ -136,6 +136,9 @@ int
 bdb_cache_entry_db_lock
 ( DB_ENV *env, u_int32_t locker, Entry *e, int rw, u_int32_t flags, DB_LOCK *lock )
 {
+#ifdef NO_THREADS
+       return 0;
+#else
        int       rc;
        DBT       lockobj;
        int       db_rw;
@@ -161,16 +164,21 @@ bdb_cache_entry_db_lock
 #endif
        }
        return rc;
+#endif /* NO_THREADS */
 }
 
 int
 bdb_cache_entry_db_unlock
 ( DB_ENV *env, DB_LOCK *lock )
 {
+#ifdef NO_THREADS
+       return 0;
+#else
        int rc;
 
        rc = LOCK_PUT ( env, lock );
        return rc;
+#endif
 }
 
 /*
@@ -1123,29 +1131,17 @@ bdb_locker_id_free( void *key, void *data )
 }
 
 int
-bdb_locker_id( Operation *op, struct bdb_info *bdb, int *locker )
+bdb_locker_id( Operation *op, DB_ENV *env, int *locker )
 {
        int i, rc, lockid;
        void *data;
-       DB_ENV *env;
-
-       if ( !bdb || !op || !locker ) return -1;
 
-       env = bdb->bi_dbenv;
-       if ( !env ) return -1;
+       if ( !env || !op || !locker ) return -1;
 
-#ifdef NO_THREADS
-       if ( !bdb->bi_locker_id ) {
-               rc = XLOCK_ID( env, &bdb->bi_locker_id );
-               if (rc != 0) return rc;
-       }
-       *locker = bdb->bi_locker_id;
-       return 0;
-#else
-       /* Shouldn't happen */
+       /* Shouldn't happen unless we're single-threaded */
        if ( !op->o_threadctx ) {
                *locker = 0;
-               return -1;
+               return 0;
        }
 
        if ( ldap_pvt_thread_pool_getkey( op->o_threadctx, env, &data, NULL ) ) {
@@ -1175,6 +1171,5 @@ bdb_locker_id( Operation *op, struct bdb_info *bdb, int *locker )
        }
        *locker = lockid;
        return 0;
-#endif /* NO_THREADS */
 }
 #endif
index d8a9e683d2d112ecf2602d0be0b9a0b2027440a9..7bd08c67269124030c7b9aabff90f651007b6d98 100644 (file)
@@ -178,9 +178,7 @@ bdb_db_open( BackendDB *be )
 
        bdb->bi_dbenv->set_errpfx( bdb->bi_dbenv, be->be_suffix[0].bv_val );
        bdb->bi_dbenv->set_errcall( bdb->bi_dbenv, bdb_errcall );
-#ifndef NO_THREADS
        bdb->bi_dbenv->set_lk_detect( bdb->bi_dbenv, bdb->bi_lock_detect );
-#endif
 
 #ifdef BDB_SUBDIRS
        {
@@ -414,11 +412,6 @@ bdb_db_close( BackendDB *be )
 
        bdb_cache_release_all (&bdb->bi_cache);
 
-#if defined(NO_THREADS) && defined(BDB_REUSE_LOCKERS)
-       if ( bdb->bi_locker_id ) {
-               bdb_locker_id_free( bdb->bi_dbenv, bdb->bi_locker_id );
-       }
-#endif
        return 0;
 }
 
index 262c5a81378496cf17b87d572f3c0338914b2a89..6c7dfeb5863175293a4808a692a946e8324634ab 100644 (file)
@@ -366,7 +366,7 @@ void bdb_cache_release_all( Cache *cache );
 
 #ifdef BDB_REUSE_LOCKERS
 
-int bdb_locker_id( Operation *op, struct bdb_info *bdb, int *locker );
+int bdb_locker_id( Operation *op, DB_ENV *env, int *locker );
 
 #endif