#538 prevent destructors from throwing exceptions

This commit is contained in:
Guenter Obiltschnig
2014-09-19 09:46:49 +02:00
parent c8686a727d
commit 544229302e
60 changed files with 555 additions and 131 deletions

View File

@@ -33,7 +33,14 @@ PooledSessionImpl::PooledSessionImpl(PooledSessionHolder* pHolder):
PooledSessionImpl::~PooledSessionImpl()
{
close();
try
{
close();
}
catch (...)
{
poco_unexpected();
}
}

View File

@@ -75,13 +75,20 @@ RecordSet::RecordSet(const RecordSet& other):
RecordSet::~RecordSet()
{
delete _pBegin;
delete _pEnd;
if(_pFilter) _pFilter->release();
try
{
delete _pBegin;
delete _pEnd;
if(_pFilter) _pFilter->release();
RowMap::iterator it = _rowMap.begin();
RowMap::iterator end = _rowMap.end();
for (; it != end; ++it) delete it->second;
RowMap::iterator it = _rowMap.begin();
RowMap::iterator end = _rowMap.end();
for (; it != end; ++it) delete it->second;
}
catch (...)
{
poco_unexpected();
}
}

View File

@@ -60,9 +60,16 @@ void RowFilter::init()
RowFilter::~RowFilter()
{
release();
if (_pRecordSet) _pRecordSet->filter(0);
if (_pParent.get()) _pParent->removeFilter(this);
try
{
release();
if (_pRecordSet) _pRecordSet->filter(0);
if (_pParent.get()) _pParent->removeFilter(this);
}
catch (...)
{
poco_unexpected();
}
}

View File

@@ -69,7 +69,14 @@ SQLChannel::SQLChannel(const std::string& connector,
SQLChannel::~SQLChannel()
{
close();
try
{
close();
}
catch (...)
{
poco_unexpected();
}
}

View File

@@ -41,7 +41,14 @@ SessionPool::SessionPool(const std::string& connector, const std::string& connec
SessionPool::~SessionPool()
{
shutdown();
try
{
shutdown();
}
catch (...)
{
poco_unexpected();
}
}

View File

@@ -40,21 +40,28 @@ Transaction::Transaction(Poco::Data::Session& rSession, bool start):
Transaction::~Transaction()
{
if (_rSession.isTransaction())
try
{
try
if (_rSession.isTransaction())
{
if (_pLogger)
_pLogger->debug("Rolling back transaction.");
try
{
if (_pLogger)
_pLogger->debug("Rolling back transaction.");
_rSession.rollback();
}
catch (...)
{
if (_pLogger)
_pLogger->error("Error while rolling back database transaction.");
_rSession.rollback();
}
catch (...)
{
if (_pLogger)
_pLogger->error("Error while rolling back database transaction.");
}
}
}
catch (...)
{
poco_unexpected();
}
}