|
Boost Users : |
Subject: Re: [Boost-users] [ASIO] random crashes
From: Axel (axel.azerty_at_[hidden])
Date: 2009-01-30 04:14:52
Jon Biggar wrote:
>
>
> From my experience, this is likely due to trying to invoke a member
> function on a lock that is already destroyed. You probably have a race
> condition where you are doing something on the ASIO socket after it's
> already been destroyed.
The only thread who can destroy the instance of the object (the asio
socket instance is a member of this object) is the io_service running
thread.
The destroy instruction is in a receive error handler : I cancel timer,
close the socket and destroy the instance ; could the timeout handler
(which seems to cause the crash) be executed after the destruction of
the object ?
Maybe my design is bad, what would be a proper way to handle socket
timeout and socket explicit close ?
My design looks like :
explicit_close()
{
timer.cancel() ; // triggers handle_timeout
socket.cancel() ;
}
handle_timeout()
{
socket.close() ; // this triggers the handle_receive() function
}
handle_receive()
{
if(! error) {}
else{timer.cancel() ; socket.close() ; delete this ;}
}
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net