Right, it is not allowed with my patch either. I agree it would be nice
to allow 'native' exceptions to propagate through corresponding parts
of call stack. It is not clear, however, how to detect 'cancellation
refusal' in such cases.
Instead, I'm working on implementing my own thing on top of my sigsafe
library. None of the standard library functions will be cancellation
points to my code (just sigsafe_XXX() system call wrappers and code
that uses them), but that's life.
Are they still going to be cancellation points? For example, if I
call your sigsafe_mutex_lock() and then cancel this thread (perhaps
through sigsafe_cancel()) will it still work? Note that according to
the SUS pthread_mutex_lock "shall not return an error code of [EINTR]".