summaryrefslogtreecommitdiff
path: root/cpp/src/Transform/TransformDB.cpp
diff options
context:
space:
mode:
authorMark Spruiell <mes@zeroc.com>2003-11-20 16:21:06 +0000
committerMark Spruiell <mes@zeroc.com>2003-11-20 16:21:06 +0000
commitf1879dc6db3df3645193c58d8319f8d0c85b089f (patch)
treedd45e615061c64d97b4a0251823398cbfc495044 /cpp/src/Transform/TransformDB.cpp
parentOA deadlock fix (diff)
downloadice-f1879dc6db3df3645193c58d8319f8d0c85b089f.tar.bz2
ice-f1879dc6db3df3645193c58d8319f8d0c85b089f.tar.xz
ice-f1879dc6db3df3645193c58d8319f8d0c85b089f.zip
open old database with transaction
Diffstat (limited to 'cpp/src/Transform/TransformDB.cpp')
-rw-r--r--cpp/src/Transform/TransformDB.cpp14
1 files changed, 12 insertions, 2 deletions
diff --git a/cpp/src/Transform/TransformDB.cpp b/cpp/src/Transform/TransformDB.cpp
index cc2d9467b03..df948fbbc30 100644
--- a/cpp/src/Transform/TransformDB.cpp
+++ b/cpp/src/Transform/TransformDB.cpp
@@ -496,6 +496,7 @@ run(int argc, char** argv, const Ice::CommunicatorPtr& communicator)
}
DbEnv dbEnv(0);
+ DbTxn* txn = 0;
Db* db = 0;
Db* dbNew = 0;
int status = EXIT_SUCCESS;
@@ -511,12 +512,13 @@ run(int argc, char** argv, const Ice::CommunicatorPtr& communicator)
u_int32_t flags = DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_MPOOL | DB_INIT_TXN | DB_RECOVER | DB_CREATE;
dbEnv.open(dbEnvName.c_str(), flags, TRANSFORM_DB_MODE);
db = new Db(&dbEnv, 0);
- db->open(0, dbName.c_str(), 0, DB_BTREE, DB_RDONLY, TRANSFORM_DB_MODE);
+ dbEnv.txn_begin(0, &txn, 0);
+ db->open(txn, dbName.c_str(), 0, DB_BTREE, DB_RDONLY, TRANSFORM_DB_MODE);
dbNew = new Db(&dbEnv, 0);
dbNew->open(0, dbNameNew.c_str(), 0, DB_BTREE, DB_CREATE | DB_EXCL, TRANSFORM_DB_MODE);
istringstream istr(descriptors);
- transformer.transform(istr, db, dbNew, cerr);
+ transformer.transform(istr, db, dbNew, txn, cerr);
}
catch(const DbException& ex)
{
@@ -525,6 +527,10 @@ run(int argc, char** argv, const Ice::CommunicatorPtr& communicator)
}
catch(...)
{
+ if(txn)
+ {
+ txn->abort();
+ }
if(db)
{
db->close(0);
@@ -539,6 +545,10 @@ run(int argc, char** argv, const Ice::CommunicatorPtr& communicator)
throw;
}
+ if(txn)
+ {
+ txn->abort();
+ }
if(db)
{
db->close(0);