Subject: Re: [Boost-bugs] [Boost C++ Libraries] #5727: race condition between ~basic_condition_variable() and notify_all()
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2011-12-07 21:31:56
#5727: race condition between ~basic_condition_variable() and notify_all()
-------------------------------------+--------------------------------------
Reporter: sbear.powell@⦠| Owner: viboes
Type: Bugs | Status: assigned
Milestone: To Be Determined | Component: thread
Version: Boost 1.46.1 | Severity: Problem
Resolution: | Keywords:
-------------------------------------+--------------------------------------
Comment (by viboes):
Replying to [comment:6 sbear.powell@â¦]:
> Replying to [comment:5 viboes]:
> > I think that Boost.Thread can not do any think here. You are sharing
the variable notifier allocated on the stack between two thread. When the
function foo returns, the lambda thread will continue using a destroyed
instance.
>
> The only potential fix I can think of on Boost.Thread's side would be to
lock the {{{condition_variable}}}'s internal mutex in its destructor--that
way nothing will be destroyed until after {{{notify_all()}}} is out of its
critical section.
Maybe I'm wrong, but I think this is out of the philosophy "don't pay for
what you don't use".
> >
> > Note that the same issue will occur with any shared variable.
> > IMO, it is up to the application to manage with this kind of errors.
> >
>
> Right. Is there any general rule of thumb on thread-safety of
destructors? What do the other Boost.Thread classes do in regards to that?
AFAIK no destructor takes care of these kind of thread-safety. If you want
you can start a thread on the ML so others could give their advice.
> > Let me know if you share my point of view.
>
> Yeah, after some thought I agree with you--it's not really a bug in
Boost.Thread, unless the rest of the Boost.Thread library keeps
destructors thread-safe. In the end, it's not so hard to add the second
mutex, or to just stick {{{t.join()}}} before {{{foo()}}} returns.
Yes the user has everything to prevent the deadlock.
-- Ticket URL: <https://svn.boost.org/trac/boost/ticket/5727#comment:7> Boost C++ Libraries <http://www.boost.org/> Boost provides free peer-reviewed portable C++ source libraries.
This archive was generated by hypermail 2.1.7 : 2017-02-16 18:50:08 UTC