|
Boost Users : |
From: Gottlob Frege (gottlobfrege_at_[hidden])
Date: 2007-02-19 20:03:10
On 2/19/07, Peter Dimov <pdimov_at_[hidden]> 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
>
> I can't think of a way to avoid the above that doesn't also solve the "call
> after disconnect" problem.
>
using weak_ptrs (I think you've heard of them? :-). This was one of
the ideas that really started the whole ball rolling.
Tony
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