Hello,
I'm using boost::asio on WinXP64, with boost 1.39. My app is
deadlocking during destruction of a static object that has an io_service member
variable.
If I explicitly delete the static object, no deadlock occurs.
The static object is actually a shared_pointer, which points to the object I
mentioned above. So at exit, assuming I haven't explicitly deleted the object, once
the reference count reaches zero, delete is called, and the process deadlocks.
The offending piece of code appears to be in
win_thread.hpp:143.
void join()
{
::WaitForSingleObject(exit_event_, INFINITE);
::CloseHandle(exit_event_);
if
(terminate_threads())
{
::TerminateThread(thread_, 0);
}
else
{
::QueueUserAPC(apc_function,
thread_, 0);
::WaitForSingleObject(thread_, INFINITE);
}
}
It is blocked at ::WaitForSingleObject(exit_event_,
INFINITE);
(This is as a result of the destruction of the io_service member).
In case it's significant, the io_service object is used to
establish several socket connections (to and from remote hosts), some of which
are through socket.connect, and others through socket.connect_async.
Thanks!
Danny