Boost logo

Boost Users :

From: Peter Dimov (pdimov_at_[hidden])
Date: 2007-02-19 18:11:37


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

I can't think of a way to avoid the above that doesn't also solve the "call
after disconnect" problem.


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