From e9644c20ce4718ca99953cab0d306b7789303c8e Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Mon, 10 Feb 2020 00:52:50 +0000 Subject: htl: Make sem_wait/sem_timedwait interruptible --- sysdeps/mach/htl/pt-timedblock.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'sysdeps/mach/htl/pt-timedblock.c') diff --git a/sysdeps/mach/htl/pt-timedblock.c b/sysdeps/mach/htl/pt-timedblock.c index 63af869c90..ead070e397 100644 --- a/sysdeps/mach/htl/pt-timedblock.c +++ b/sysdeps/mach/htl/pt-timedblock.c @@ -26,6 +26,10 @@ #include +#ifndef MSG_OPTIONS +# define MSG_OPTIONS 0 +#endif + /* Block THREAD. */ error_t __pthread_timedblock (struct __pthread *thread, @@ -54,11 +58,13 @@ __pthread_timedblock (struct __pthread *thread, /* Need to do a carry. */ timeout -= (now.tv_nsec - abstime->tv_nsec + 999999) / 1000000; - err = __mach_msg (&msg, MACH_RCV_MSG | MACH_RCV_TIMEOUT, 0, + err = __mach_msg (&msg, MACH_RCV_MSG | MACH_RCV_TIMEOUT | MSG_OPTIONS, 0, sizeof msg, thread->wakeupmsg.msgh_remote_port, timeout, MACH_PORT_NULL); if (err == EMACH_RCV_TIMED_OUT) return ETIMEDOUT; + if ((MSG_OPTIONS & MACH_RCV_INTERRUPT) && err == MACH_RCV_INTERRUPTED) + return EINTR; assert_perror (err); return 0; -- cgit 1.4.1