|
Boost Users : |
From: Peter Dimov (pdimov_at_[hidden])
Date: 2007-02-19 19:43:04
Peter Dimov wrote:
> Gottlob Frege wrote:
>
>> - one of the original reasons (in my head at least) for blocking on
>> disconnect() is so that you can disconnect() in your destructor (and
>> thus avoid having a dead object being called).
>
> But then you need to deal with the possibility that a call can
> already be in progress at the time your destructor is invoked. (If
> you can guarantee that this cannot happen, it seems to me that you
> can also guarantee that a call isn't started after the disconnect.)
> So let's assume that you lock the object mutex. There's still the
> nasty scenario where:
>
> ~X locks the object mutex
> X::f is called by the signal and blocks on the object mutex
> ~X disconnects and destroys *this, including the object mutex
> X::f crashes and burns
Actually, if disconnect waits for X::f to return, this will deadlock, not
crash.
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