Loading...
threads/cprocs.c Libc-763.12 Libc-825.26
--- 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;
 }