Boost logo

Boost :

Subject: Re: [boost] [Thread] thread::interrupt of the death
From: Gaetano Mendola (mendola_at_[hidden])
Date: 2011-01-16 10:46:09


On 16/01/2011 14:28, Dave Abrahams wrote:
> At Sun, 16 Jan 2011 09:20:38 +0100,
> Gaetano Mendola wrote:
>>
>> Hi all,
>> I think a thread after getting an interrupt the first think to do
>> before to throw a boost::thread_interrupted (passing or being on an
>> interruption point) has to disable interruption, indeed think what
>> happens if during a stack unwinding the thread passes again on an
>> interruption point and it receives a second interrupt.
>> This scenario is not that hard to happen.
>
> 1: is this the behavior in the draft standard?

Are you talking about threads in the standard or throwing while a stack
unwinding?
AFAIK c++0x standard doesn't provide a method to interrupt a thread to
the other side for the draft having code that can throw inside the DTOR
is a compile time error.

> 2: is it important to special-case for thread interruption? It's
> still going to be true that you can't call anything that might
> throw during stack unwinding (including during thread
> interruption), a more general case of the same scenario.

Well, I have come to this conclusion because my own application uses
third party libraries and 2 of those are based on boost thread. My
application was crashing because after have interrupted (twice) my
instantiated thread during the stack unwinding those two libraries
where performing a thread_group::join_all.

I have already asked them to fix they own code (gnuradio to mention one
library) but the source of the issue is the fact that boost::thread
reacts again with a throw at the second interrupt received instead to
ignore it.

Regards
Gaetano Mendola


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk