From 1bffa67ee9f4057cabdb04157a009d13338fab9b Mon Sep 17 00:00:00 2001
From: Rich Megginson <rmeggins@redhat.com>
Date: Fri, 2 Mar 2012 09:38:10 -0700
Subject: [PATCH] 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.
---
 ldap/servers/slapd/back-ldbm/dblayer.c   |    4 +++-
 ldap/servers/slapd/back-ldbm/ldif2ldbm.c |    4 ++--
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/ldap/servers/slapd/back-ldbm/dblayer.c b/ldap/servers/slapd/back-ldbm/dblayer.c
index c6f3863..c1a123c 100644
--- a/ldap/servers/slapd/back-ldbm/dblayer.c
+++ b/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;
diff --git a/ldap/servers/slapd/back-ldbm/ldif2ldbm.c b/ldap/servers/slapd/back-ldbm/ldif2ldbm.c
index 77f7cc9..c802ff2 100644
--- a/ldap/servers/slapd/back-ldbm/ldif2ldbm.c
+++ b/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;
-- 
1.7.1

