Browse Source

init txn thread private data for all database modes

Even though the indexing code explicitly disables the database opening in
transaction mode, it still uses transactions.  So we have to init the
thread private data for transactions in all cases.  This doesn't hurt
anything, just creates a thread private key.  Also, in the indexing code,
move the dblayer_txn_init until after dblayer_start has been called.
Reviewed by: nkinder (Thanks!)
Rich Megginson 13 years ago
parent
commit
e2532d8f58

+ 3 - 1
ldap/servers/slapd/back-ldbm/dblayer.c

@@ -1567,7 +1567,6 @@ dblayer_start(struct ldbminfo *li, int dbmode)
             if (!(dbmode & DBLAYER_NO_DBTHREADS_MODE))
                 dbmode = DBLAYER_NORMAL_MODE; /* to restart helper threads */
         }
-        dblayer_init_pvt_txn();
     }
 
     if (priv->dblayer_private_mem) {
@@ -1710,6 +1709,9 @@ dblayer_start(struct ldbminfo *li, int dbmode)
       open_flags |= DB_TXN_NOSYNC;
 #endif
     }
+    /* ldbm2index uses transactions but sets the transaction flag to off - we
+       need to dblayer_init_pvt_txn in that case */
+    dblayer_init_pvt_txn();
     if (!((DBLAYER_IMPORT_MODE|DBLAYER_INDEX_MODE) & dbmode))
     {
         pEnv->dblayer_openflags = open_flags;

+ 2 - 2
ldap/servers/slapd/back-ldbm/ldif2ldbm.c

@@ -1693,8 +1693,6 @@ ldbm_back_ldbm2index(Slapi_PBlock *pb)
     run_from_cmdline = (task_flags & SLAPI_TASK_RUNNING_FROM_COMMANDLINE);
     slapi_pblock_get(pb, SLAPI_BACKEND_TASK, &task);
 
-    dblayer_txn_init(li, &txn);
-
     if (run_from_cmdline) {
         /* No ldbm backend exists until we process the config info. */
         li->li_flags |= SLAPI_TASK_RUNNING_FROM_COMMANDLINE;
@@ -1945,6 +1943,8 @@ ldbm_back_ldbm2index(Slapi_PBlock *pb)
         dbc->c_close(dbc);
     }
 
+    dblayer_txn_init(li, &txn);
+
     while (1) {
         if ( g_get_shutdown() || c_get_shutdown() ) {
             goto err_out;