From 4bd0d2d2e6218d78ea012e9cacad9884488bd768 Mon Sep 17 00:00:00 2001 From: Arvid Norberg Date: Sat, 20 Dec 2008 18:27:09 +0000 Subject: [PATCH] added resolver cancellation to http_connection and udp_socket. might prevent potential shutdown stalls --- src/http_connection.cpp | 1 + src/torrent.cpp | 6 ++++++ src/udp_socket.cpp | 1 + 3 files changed, 8 insertions(+) diff --git a/src/http_connection.cpp b/src/http_connection.cpp index 2b4eefbed..f0d20d864 100644 --- a/src/http_connection.cpp +++ b/src/http_connection.cpp @@ -250,6 +250,7 @@ void http_connection::close() { error_code ec; m_timer.cancel(ec); + m_resolver.cancel(); m_limiter_timer.cancel(ec); m_sock.close(ec); m_hostname.clear(); diff --git a/src/torrent.cpp b/src/torrent.cpp index 90dabef46..f99dd2d54 100644 --- a/src/torrent.cpp +++ b/src/torrent.cpp @@ -2538,6 +2538,8 @@ namespace libtorrent (*m_ses.m_logger) << time_now_string() << " completed resolve proxy hostname for: " << url << "\n"; #endif + if (m_abort) return; + if (e || host == tcp::resolver::iterator()) { if (m_ses.m_alerts.should_post()) @@ -2597,6 +2599,8 @@ namespace libtorrent (*m_ses.m_logger) << time_now_string() << " completed resolve: " << url << "\n"; #endif + if (m_abort) return; + std::set::iterator i = m_resolving_web_seeds.find(url); if (i != m_resolving_web_seeds.end()) m_resolving_web_seeds.erase(i); @@ -2740,6 +2744,8 @@ namespace libtorrent m_resolving_country = false; + if (m_abort) return; + // must be ordered in increasing order static const country_entry country_map[] = { diff --git a/src/udp_socket.cpp b/src/udp_socket.cpp index 0fb46f30a..07fa24071 100644 --- a/src/udp_socket.cpp +++ b/src/udp_socket.cpp @@ -251,6 +251,7 @@ void udp_socket::close() m_ipv4_sock.close(ec); m_ipv6_sock.close(ec); m_socks5_sock.close(ec); + m_resolver.cancel(); if (m_connection_ticket >= 0) { m_cc.done(m_connection_ticket);