From 7e7182256a104da518018a0b4edfe51689487f42 Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Sun, 9 Feb 2020 22:27:56 +0000 Subject: hurd: Make nanosleep a cancellation point --- sysdeps/mach/clock_nanosleep.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/sysdeps/mach/clock_nanosleep.c b/sysdeps/mach/clock_nanosleep.c index ae9335cb2b..23ebc15274 100644 --- a/sysdeps/mach/clock_nanosleep.c +++ b/sysdeps/mach/clock_nanosleep.c @@ -22,6 +22,7 @@ #include #include #include +#include static int nanosleep_call (const struct timespec *req, struct timespec *rem) @@ -39,9 +40,13 @@ nanosleep_call (const struct timespec *req, struct timespec *rem) if (rem != NULL) __clock_gettime (CLOCK_REALTIME, &before); + int cancel_oldtype = LIBC_CANCEL_ASYNC(); err = __mach_msg (NULL, MACH_RCV_MSG|MACH_RCV_TIMEOUT|MACH_RCV_INTERRUPT, 0, 0, recv, ms, MACH_PORT_NULL); + LIBC_CANCEL_RESET (cancel_oldtype); + __mach_port_destroy (mach_task_self (), recv); + if (err == EMACH_RCV_INTERRUPTED) { if (rem != NULL) -- cgit 1.4.1