rts: Use pthread itimer implementation on Darwin
authorBen Gamari <bgamari.foss@gmail.com>
Wed, 7 Dec 2016 13:50:52 +0000 (08:50 -0500)
committerBen Gamari <ben@smart-cactus.org>
Wed, 7 Dec 2016 14:55:29 +0000 (09:55 -0500)
We want to avoid using SIGALRM whenever possible since we will interrupt
long-running system calls. See #10840.

Test Plan: Validate on Darwin

Reviewers: austin, erikd, simonmar

Reviewed By: simonmar

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D2796

GHC Trac Issues: #10840

rts/posix/Itimer.c

index ee93dd7..59d34be 100644 (file)
 #endif
 
 /*
+ * We want to avoid using the SIGALRM signals whenever possible as these signals
+ * interrupt system calls (see #10840) and can be overridden by user code. On
+ * Darwin we can use a dedicated thread and usleep.
+ */
+#if defined(darwin_HOST_OS)
+#define USE_PTHREAD_FOR_ITIMER
+#endif
+
+/*
  * On Linux in the threaded RTS we can use timerfd_* (introduced in Linux
  * 2.6.25) and a thread instead of alarm signals. It avoids the risk of
  * interrupting syscalls (see #10840) and the risk of being accidentally