diff --git a/include/libtorrent/udp_socket.hpp b/include/libtorrent/udp_socket.hpp index b2f76e14f..0370e127e 100644 --- a/include/libtorrent/udp_socket.hpp +++ b/include/libtorrent/udp_socket.hpp @@ -138,6 +138,7 @@ namespace libtorrent #ifdef TORRENT_DEBUG bool m_started; int m_magic; + int m_outstanding_when_aborted; #endif }; diff --git a/src/udp_socket.cpp b/src/udp_socket.cpp index 9cd10810e..30b378d7b 100644 --- a/src/udp_socket.cpp +++ b/src/udp_socket.cpp @@ -67,6 +67,7 @@ udp_socket::udp_socket(asio::io_service& ios, udp_socket::callback_t const& c #ifdef TORRENT_DEBUG m_magic = 0x1337; m_started = false; + m_outstanding_when_aborted = -1; #endif } @@ -206,7 +207,7 @@ void udp_socket::on_read(udp::socket* s, error_code const& e, std::size_t bytes_ ++m_outstanding; #ifdef TORRENT_DEBUG - m_started = true; + m_started = true; #endif return; } @@ -356,6 +357,9 @@ void udp_socket::close() m_socks5_sock.close(ec); m_resolver.cancel(); m_abort = true; +#ifdef TORRENT_DEBUG + m_outstanding_when_aborted = m_outstanding; +#endif if (m_connection_ticket >= 0) { m_cc.done(m_connection_ticket); @@ -376,6 +380,9 @@ void udp_socket::bind(udp::endpoint const& ep, error_code& ec) CHECK_MAGIC; mutex::scoped_lock l(m_mutex); + TORRENT_ASSERT(m_abort == false); + if (m_abort) return; + if (m_ipv4_sock.is_open()) m_ipv4_sock.close(ec); #if TORRENT_USE_IPV6 if (m_ipv6_sock.is_open()) m_ipv6_sock.close(ec); @@ -389,6 +396,7 @@ void udp_socket::bind(udp::endpoint const& ep, error_code& ec) if (ec) return; m_ipv4_sock.async_receive_from(asio::buffer(m_v4_buf, sizeof(m_v4_buf)) , m_v4_ep, boost::bind(&udp_socket::on_read, this, &m_ipv4_sock, _1, _2)); + ++m_outstanding; } #if TORRENT_USE_IPV6 else @@ -399,9 +407,9 @@ void udp_socket::bind(udp::endpoint const& ep, error_code& ec) if (ec) return; m_ipv6_sock.async_receive_from(asio::buffer(m_v6_buf, sizeof(m_v6_buf)) , m_v6_ep, boost::bind(&udp_socket::on_read, this, &m_ipv6_sock, _1, _2)); + ++m_outstanding; } #endif - ++m_outstanding; #ifdef TORRENT_DEBUG m_started = true; #endif @@ -413,6 +421,9 @@ void udp_socket::bind(int port) CHECK_MAGIC; mutex::scoped_lock l(m_mutex); + TORRENT_ASSERT(m_abort == false); + if (m_abort) return; + error_code ec; if (m_ipv4_sock.is_open()) m_ipv4_sock.close(ec); diff --git a/src/udp_tracker_connection.cpp b/src/udp_tracker_connection.cpp index e8efa2851..c0d999436 100644 --- a/src/udp_tracker_connection.cpp +++ b/src/udp_tracker_connection.cpp @@ -81,6 +81,7 @@ namespace libtorrent , m_attempts(0) , m_state(action_error) { + TORRENT_ASSERT(refcount() == 1); m_socket.set_proxy_settings(proxy); }