fixed race condition around m_abort in session_impl

This commit is contained in:
Arvid Norberg 2010-06-24 21:43:00 +00:00
parent f981f6438e
commit a0cef76bf2
3 changed files with 9 additions and 4 deletions

View File

@ -33,6 +33,7 @@
incoming connection
* added more detailed instrumentation of the disk I/O thread
* fixed race condition around m_abort in session_impl
* fixed bug in web_peer_connection which could cause a hang when downloading
from web servers
* fixed bug in metadata extensions combined with encryption

View File

@ -601,7 +601,7 @@ namespace libtorrent
// set to true when the session object
// is being destructed and the thread
// should exit
volatile bool m_abort;
bool m_abort;
// is true if the session is paused
bool m_paused;

View File

@ -1639,6 +1639,8 @@ namespace aux {
if (e == asio::error::operation_aborted) return;
mutex::scoped_lock l(m_mutex);
if (m_abort) return;
error_code ec;
@ -2935,11 +2937,11 @@ namespace aux {
{
eh_initializer();
do
bool stop_loop = false;
while (!stop_loop)
{
error_code ec;
m_io_service.run(ec);
TORRENT_ASSERT(m_abort == true);
if (ec)
{
#ifdef TORRENT_DEBUG
@ -2949,8 +2951,10 @@ namespace aux {
TORRENT_ASSERT(false);
}
m_io_service.reset();
mutex::scoped_lock l(m_mutex);
stop_loop = m_abort;
}
while (!m_abort);
#if defined(TORRENT_VERBOSE_LOGGING) || defined(TORRENT_LOGGING)
(*m_logger) << time_now_string() << " locking mutex\n";