mirror of
https://github.com/pocoproject/poco.git
synced 2025-11-24 22:29:47 +01:00
#538 prevent destructors from throwing exceptions
This commit is contained in:
@@ -33,7 +33,14 @@ PooledSessionImpl::PooledSessionImpl(PooledSessionHolder* pHolder):
|
||||
|
||||
PooledSessionImpl::~PooledSessionImpl()
|
||||
{
|
||||
close();
|
||||
try
|
||||
{
|
||||
close();
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
poco_unexpected();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -69,7 +69,14 @@ SQLChannel::SQLChannel(const std::string& connector,
|
||||
|
||||
SQLChannel::~SQLChannel()
|
||||
{
|
||||
close();
|
||||
try
|
||||
{
|
||||
close();
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
poco_unexpected();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -41,7 +41,14 @@ SessionPool::SessionPool(const std::string& connector, const std::string& connec
|
||||
|
||||
SessionPool::~SessionPool()
|
||||
{
|
||||
shutdown();
|
||||
try
|
||||
{
|
||||
shutdown();
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
poco_unexpected();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user