diff options
author | Mark Spruiell <mes@zeroc.com> | 2003-11-20 16:21:06 +0000 |
---|---|---|
committer | Mark Spruiell <mes@zeroc.com> | 2003-11-20 16:21:06 +0000 |
commit | f1879dc6db3df3645193c58d8319f8d0c85b089f (patch) | |
tree | dd45e615061c64d97b4a0251823398cbfc495044 /cpp/src/Transform/TransformDB.cpp | |
parent | OA deadlock fix (diff) | |
download | ice-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.cpp | 14 |
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); |