From: Anthony Williams (anthony_w.geo_at_[hidden])
Date: 2007-11-02 11:27:17
"Phil Endecott" <spam_from_boost_dev_at_[hidden]> writes:
> Alexander Terekhov wrote:
>> Anthony Williams wrote:
>>> N2420 (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2420.pdf)
>>> covers some of the relevant ground --- it's the minutes of the POSIX/C++
>>> liaison committee.
>> "Gnu gcc and Solaris pthreads: The Gnu gcc and Solaris pthreads
>> implementations are two known implementations that attempt to map
>> POSIX pthread cancellation onto C++ exception handling, but both
>> do so at the cost of breaking the exception model (i.e., they no
>> longer conform to ISO C++) because the alternative appears to be
>> that C++ destructors and catch blocks would not be invoked for
>> cancellation which would mean that resources would be leaked."
>> Uhmm. Don't know about (modern) Solaris, but glibc (presumably
>> that is meant by "Gnu gcc pthreads implementation") does invoke
>> C++ destructors and catch blocks.
> Realy??? Wow! Can you direct me to some documentation?
I can't find it documented anywhere sensible, but I've seen it discussed on
mailing lists several times.
As I understand it, with gcc on linux, pthread_cancel will run destructors and
catch(...) blocks in the cancelled thread, but if the catch(...) block doesn't
rethrow the exception, it is automatically rethrown at the end of the block
(like function-try-blocks do in constructors), so that the cancel is "sticky".
-- Anthony Williams Just Software Solutions Ltd - http://www.justsoftwaresolutions.co.uk Registered in England, Company Number 5478976. Registered Office: 15 Carrallack Mews, St Just, Cornwall, TR19 7UL
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk