Loading...
--- Libc/Libc-763.12/threads/cprocs.c
+++ Libc/Libc-825.26/threads/cprocs.c
@@ -140,23 +140,24 @@
extern int __pthread_canceled(int);
void
-cthread_set_errno_self(error)
- int error;
+cthread_set_errno_self(int error, int nocancel)
{
int *ep = __error();
extern int __unix_conforming;
pthread_t self = NULL;
+ int check_cancel = __unix_conforming && !nocancel;
- if ((__unix_conforming) && ((error & 0xff) == EINTR) && (__pthread_canceled(0) == 0)) {
+ if (check_cancel && ((error & 0xff) == EINTR) && (__pthread_canceled(0) == 0)) {
self = pthread_self();
if (self != NULL)
self->cancel_error = error;
pthread_exit(PTHREAD_CANCELED);
}
- if (ep != &errno)
- *ep = error;
+ if (ep != &errno) {
+ *ep = error;
+ }
- errno = error;
+ errno = error;
}