Boost logo

Boost Users :

Subject: Re: [Boost-users] boost::wave::context deadlocks when called from a DLL
From: Hartmut Kaiser (hartmut.kaiser_at_[hidden])
Date: 2012-06-23 12:19:27


> On Wed, Jun 20, 2012 at 9:39 PM, Julien Lebot <julien.ar.lebot_at_[hidden]>
> wrote:
> >
> > Here is the (cleaned up) stack trace of the deadlock:
> >
> > ntdll.dll!0000000076dc135a()
> > [Frames below may be incorrect and/or missing, no symbols loaded for
> > ntdll.dll]
> > KernelBase.dll!000007fefd4f10dc()
> > Nitro.dll!boost::call_once<void (__cdecl*)(void)>(boost::once_flag &
> > flag, void (void)* f)  Line 197 + 0x18 bytes   C++
> > Nitro.dll!boost::call_once(void (void)* func, boost::once_flag & flag)
> >  Line 28 C++
> >
> > It seems boost::wave is trying to parse some time stamp, and by doing
> > so instantiates a grammar and that's when things seem to go bad.
> >
> > The deadlock happens inside the constructor of the context type, and
> > the Visual Studio debugger points me to line 197 in
> > boost\thread\win32\once.hpp
> >
> >            BOOST_VERIFY(!::boost::detail::win32::WaitForSingleObject(
> >
> > event_handle,::boost::detail::win32::infinite));
> >
>
> It seems that call_once is not re-entrant; at least not in Win32, as
> indicated by the following ticket:
> https://svn.boost.org/trac/boost/ticket/3407
> Any ideas on how to work around that issue ?

Do you have a minimal test-case reproducing the problem?

Regards Hartmut
---------------
http://boost-spirit.com
http://stellar.cct.lsu.edu


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