pthread_cancel and EH: let's try this again
Alexander Terekhov
terekhov at web.de
Sat Jul 16 14:37:42 UTC 2005
Peter Dimov wrote:
[...]
> Keeping the cancellation request active doesn't need to be done by
> reasserting in the destructor. It can simply be left active. Since
> cancellation is implicitly disabled during stack unwinding,
No. Intelligent cancel delivery aside for a moment, it's explicitly
disabled only after delivery (and pthread_exit()). Consider:
some_dtor() throw() {
if (active_exception<thread_cancel_request>(0)) {
pthread_cancel(pthread_self());
pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, &errno);
try {
fclose(temp_dataset); // no need to flush
}
catch(...) { }
}
else {
try {
fclose(temp_dataset); // no need to flush if we hit cancel
}
catch(...) { // canceled
pthread_cancel(pthread_self());
}
}
}
regards,
alexander.
More information about the c++-pthreads
mailing list