Peter Dimov wrote:
[...]
int pthread_cancelenabled(void);
RETURN VALUE
Nonzero if the current thread's cancelability state is
PTHREAD_CANCEL_ENABLE and the call is not made from within a cleanup
handler or a TSD destructor,
^^^^^^^^^^^^^^^^^^^^^^^^
zero otherwise.
could have been much simpler.
With cancel request pending, mandatory cancel points are required to
throw within a cleanup handler invoked by pthread_cleanup_pop() ["(if
/execute/ is non-zero)"] when cancel state is PTHREAD_CANCEL_ENABLE.