From: Remi Gacogne Date: Thu, 16 Feb 2017 12:59:28 +0000 (+0100) Subject: Catch exceptions in destructors X-Git-Tag: auth-4.0.4-rc1~10^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=eab2ffee51f594457b7d2560d98731c702e00345;p=thirdparty%2Fpdns.git Catch exceptions in destructors (cherry picked from commit 737a287f2d73b1e5f7f0378d9ccb2ddb389f9299) --- diff --git a/modules/geoipbackend/geoipbackend.cc b/modules/geoipbackend/geoipbackend.cc index a0ec878eeb..2f8f587160 100644 --- a/modules/geoipbackend/geoipbackend.cc +++ b/modules/geoipbackend/geoipbackend.cc @@ -293,11 +293,15 @@ void GeoIPBackend::initialize() { } GeoIPBackend::~GeoIPBackend() { - WriteLock wl(&s_state_lock); - s_rc--; - if (s_rc == 0) { // last instance gets to cleanup - s_geoip_files.clear(); - s_domains.clear(); + try { + WriteLock wl(&s_state_lock); + s_rc--; + if (s_rc == 0) { // last instance gets to cleanup + s_geoip_files.clear(); + s_domains.clear(); + } + } + catch(...) { } } diff --git a/modules/ldapbackend/ldapbackend.cc b/modules/ldapbackend/ldapbackend.cc index 3ed7574f01..0cca788380 100644 --- a/modules/ldapbackend/ldapbackend.cc +++ b/modules/ldapbackend/ldapbackend.cc @@ -105,7 +105,11 @@ LdapBackend::LdapBackend( const string &suffix ) LdapBackend::~LdapBackend() { if( m_pldap != NULL ) { delete( m_pldap ); } - L << Logger::Notice << m_myname << " Ldap connection closed" << endl; + try { + L << Logger::Notice << m_myname << " Ldap connection closed" << endl; + } + catch (...) { + } } diff --git a/modules/luabackend/minimal.cc b/modules/luabackend/minimal.cc index 0f8e3df481..ad365e49d0 100644 --- a/modules/luabackend/minimal.cc +++ b/modules/luabackend/minimal.cc @@ -61,7 +61,11 @@ LUABackend::LUABackend(const string &suffix) { } LUABackend::~LUABackend() { - L< optio UnixsocketConnector::~UnixsocketConnector() { if (this->connected) { - L<d_lock); - d_cc->d_inprogress.erase(d_dn); + try { + Lock l(&d_cc->d_lock); + d_cc->d_inprogress.erase(d_dn); + } + catch(...) { + } } DNSName d_dn; CommunicatorClass* d_cc; diff --git a/pdns/dnsdist-cache.cc b/pdns/dnsdist-cache.cc index 180c18c659..dfd08942b9 100644 --- a/pdns/dnsdist-cache.cc +++ b/pdns/dnsdist-cache.cc @@ -34,7 +34,11 @@ DNSDistPacketCache::DNSDistPacketCache(size_t maxEntries, uint32_t maxTTL, uint3 DNSDistPacketCache::~DNSDistPacketCache() { - WriteLock l(&d_lock); + try { + WriteLock l(&d_lock); + } + catch(const PDNSException& pe) { + } } bool DNSDistPacketCache::cachedValueMatches(const CacheValue& cachedValue, const DNSName& qname, uint16_t qtype, uint16_t qclass, bool tcp) diff --git a/pdns/packetcache.cc b/pdns/packetcache.cc index 331332cf16..e8c03d0ee9 100644 --- a/pdns/packetcache.cc +++ b/pdns/packetcache.cc @@ -61,13 +61,17 @@ PacketCache::PacketCache() PacketCache::~PacketCache() { - // WriteLock l(&d_mut); - vector locks; - for(auto& mc : d_maps) { - locks.push_back(new WriteLock(&mc.d_mut)); + try { + // WriteLock l(&d_mut); + vector locks; + for(auto& mc : d_maps) { + locks.push_back(new WriteLock(&mc.d_mut)); + } + for(auto wl : locks) { + delete wl; + } } - for(auto wl : locks) { - delete wl; + catch(...) { } }