diff options
author | Bernard Normier <bernard@zeroc.com> | 2012-10-15 13:26:17 -0400 |
---|---|---|
committer | Bernard Normier <bernard@zeroc.com> | 2012-10-15 13:26:17 -0400 |
commit | e5fa05955bcbb5ecbfbec341d004cfd8821bdafa (patch) | |
tree | 31e863059eca13c850f06872e8067f02009a148a /cpp/src | |
parent | WinRT fixes (diff) | |
download | ice-e5fa05955bcbb5ecbfbec341d004cfd8821bdafa.tar.bz2 ice-e5fa05955bcbb5ecbfbec341d004cfd8821bdafa.tar.xz ice-e5fa05955bcbb5ecbfbec341d004cfd8821bdafa.zip |
Fixed Freeze destructors for C++11 (ICE-4878)
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/Freeze/BackgroundSaveEvictorI.cpp | 6 | ||||
-rw-r--r-- | cpp/src/Freeze/MapI.cpp | 47 | ||||
-rw-r--r-- | cpp/src/Freeze/MapI.h | 16 | ||||
-rw-r--r-- | cpp/src/Freeze/ObjectStore.cpp | 5 | ||||
-rw-r--r-- | cpp/src/Freeze/TransactionalEvictorI.cpp | 5 |
5 files changed, 50 insertions, 29 deletions
diff --git a/cpp/src/Freeze/BackgroundSaveEvictorI.cpp b/cpp/src/Freeze/BackgroundSaveEvictorI.cpp index 7b2215f7341..c06b6a660fa 100644 --- a/cpp/src/Freeze/BackgroundSaveEvictorI.cpp +++ b/cpp/src/Freeze/BackgroundSaveEvictorI.cpp @@ -1434,15 +1434,11 @@ Freeze::BackgroundSaveEvictorElement::BackgroundSaveEvictorElement(ObjectStore<B } Freeze::BackgroundSaveEvictorElement::~BackgroundSaveEvictorElement() - { } -// COMPILERFIX: Required to build with C++ Builder 2007 -typedef ObjectStore<BackgroundSaveEvictorElement>::Position BackgroundSaveEvictorElementPosition; - void -Freeze::BackgroundSaveEvictorElement::init(BackgroundSaveEvictorElementPosition p) +Freeze::BackgroundSaveEvictorElement::init(ObjectStore<BackgroundSaveEvictorElement>::Position p) { stale = false; cachePosition = p; diff --git a/cpp/src/Freeze/MapI.cpp b/cpp/src/Freeze/MapI.cpp index bede240647b..cd2d4127629 100644 --- a/cpp/src/Freeze/MapI.cpp +++ b/cpp/src/Freeze/MapI.cpp @@ -338,7 +338,7 @@ Freeze::IteratorHelper::create(const MapHelper& m, bool readOnly) } -Freeze::IteratorHelper::~IteratorHelper() +Freeze::IteratorHelper::~IteratorHelper() ICE_NOEXCEPT_FALSE { } @@ -373,7 +373,11 @@ Freeze::IteratorHelperI::IteratorHelperI(const MapHelperI& m, bool readOnly, // // Need to start a transaction // - _tx = new Tx(_map); +#ifdef ICE_CPP11 + _tx.reset(new Tx(_map)); +#else + _tx = new Tx(_map); +#endif txn = _tx->getTxn(); } @@ -427,7 +431,7 @@ Freeze::IteratorHelperI::IteratorHelperI(const IteratorHelperI& it) : _map._iteratorList.push_back(this); } -Freeze::IteratorHelperI::~IteratorHelperI() +Freeze::IteratorHelperI::~IteratorHelperI() ICE_NOEXCEPT_FALSE { close(); } @@ -888,14 +892,7 @@ Freeze::IteratorHelperI::close() } catch(const ::DbDeadlockException& dx) { - bool raiseException = (_tx == 0); - cleanup(); - if(raiseException) - { - DeadlockException ex(__FILE__, __LINE__); - ex.message = dx.what(); - throw ex; - } + // Ignored - it's unclear if this can ever occur } catch(const ::DbException& dx) { @@ -913,7 +910,14 @@ Freeze::IteratorHelperI::cleanup() { _dbc = 0; _map._iteratorList.remove(this); + + // this can raise an exception when committing the transaction + // (only for read/write iterators) +#ifdef ICE_CPP11 + _tx.reset(); +#else _tx = 0; +#endif } @@ -945,7 +949,7 @@ Freeze::IteratorHelperI::Tx::Tx(const MapHelperI& m) : } -Freeze::IteratorHelperI::Tx::~Tx() +Freeze::IteratorHelperI::Tx::~Tx() ICE_NOEXCEPT_FALSE { if(_dead) { @@ -1039,7 +1043,15 @@ Freeze::MapHelperI::MapHelperI(const ConnectionIPtr& connection, Freeze::MapHelperI::~MapHelperI() { - close(); + try + { + close(); + } + catch(const DatabaseException& ex) + { + Ice::Error error(_connection->getCommunicator()->getLogger()); + error << "Freeze: closing map " << _dbName << " raised: " << ex; + } } Freeze::IteratorHelper* @@ -1702,7 +1714,14 @@ Freeze::MapIndexI::MapIndexI(const ConnectionIPtr& connection, MapDb& db, Freeze::MapIndexI::~MapIndexI() { - _db->close(0); + try + { + _db->close(0); + } + catch(const DbException&) + { + // Ignored + } } diff --git a/cpp/src/Freeze/MapI.h b/cpp/src/Freeze/MapI.h index dc1e421d97a..f6d3e7ded81 100644 --- a/cpp/src/Freeze/MapI.h +++ b/cpp/src/Freeze/MapI.h @@ -12,6 +12,9 @@ #include <Freeze/Map.h> #include <Freeze/ConnectionI.h> +#ifdef ICE_CPP11 +# include <memory> +#endif namespace Freeze { @@ -28,7 +31,7 @@ public: IteratorHelperI(const IteratorHelperI&); virtual - ~IteratorHelperI(); + ~IteratorHelperI() ICE_NOEXCEPT_FALSE; bool find(const Key& k) const; @@ -62,12 +65,15 @@ public: void close(); - class Tx : public IceUtil::SimpleShared + class Tx +#ifndef ICE_CPP11 + : public IceUtil::SimpleShared +#endif { public: Tx(const MapHelperI&); - ~Tx(); + ~Tx() ICE_NOEXCEPT_FALSE; void dead(); @@ -82,7 +88,11 @@ public: bool _dead; }; +#ifdef ICE_CPP11 + typedef std::shared_ptr<Tx> TxPtr; +#else typedef IceUtil::Handle<Tx> TxPtr; +#endif const TxPtr& tx() const; diff --git a/cpp/src/Freeze/ObjectStore.cpp b/cpp/src/Freeze/ObjectStore.cpp index 99a09af7b98..e8801a1b3c7 100644 --- a/cpp/src/Freeze/ObjectStore.cpp +++ b/cpp/src/Freeze/ObjectStore.cpp @@ -214,9 +214,8 @@ Freeze::ObjectStoreBase::~ObjectStoreBase() } catch(const DbException& dx) { - DatabaseException ex(__FILE__, __LINE__); - ex.message = dx.what(); - throw ex; + Ice::Error error(_communicator->getLogger()); + error << "Freeze: closing ObjectStore " << _dbName << " raised DbException: " << dx.what(); } } diff --git a/cpp/src/Freeze/TransactionalEvictorI.cpp b/cpp/src/Freeze/TransactionalEvictorI.cpp index 594d8f1a599..e24c5006111 100644 --- a/cpp/src/Freeze/TransactionalEvictorI.cpp +++ b/cpp/src/Freeze/TransactionalEvictorI.cpp @@ -840,11 +840,8 @@ Freeze::TransactionalEvictorElement::~TransactionalEvictorElement() { } -// COMPILERFIX: Required to build with C++ Builder 2007 -typedef ObjectStore<TransactionalEvictorElement>::Position TransactionalEvictorElementPosition; - void -Freeze::TransactionalEvictorElement::init(TransactionalEvictorElementPosition p) +Freeze::TransactionalEvictorElement::init(ObjectStore<TransactionalEvictorElement>::Position p) { _stale = false; _cachePosition = p; |