
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