summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configure.ac13
-rw-r--r--rts/posix/Itimer.c3
2 files changed, 15 insertions, 1 deletions
diff --git a/configure.ac b/configure.ac
index 8c984def52..d298af87a4 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1108,6 +1108,19 @@ fi
dnl ** check for more functions
dnl ** The following have been verified to be used in ghc/, but might be used somewhere else, too.
AC_CHECK_FUNCS([getclock getrusage gettimeofday setitimer siginterrupt sysconf times ctime_r])
+
+AC_TRY_RUN([
+#include <sys/types.h>
+#include <sys/time.h>
+int main(void) {
+ struct itimerval tval;
+ tval.it_value.tv_sec = 1;
+ tval.it_value.tv_usec = 0;
+ tval.it_interval = tval.it_value;
+ return setitimer(ITIMER_VIRTUAL, &tval, (void*)0) != 0;
+}
+],[AC_DEFINE([HAVE_SETITIMER_VIRTUAL], [1], [Define to 1 if setitimer accepts ITIMER_VIRTUAL, 0 else.])])
+
dnl ** On OS X 10.4 (at least), time.h doesn't declare ctime_r if
dnl ** _POSIX_C_SOURCE is defined
AC_CHECK_DECLS([ctime_r], , ,
diff --git a/rts/posix/Itimer.c b/rts/posix/Itimer.c
index 6b4ba3bb70..eb26cd3699 100644
--- a/rts/posix/Itimer.c
+++ b/rts/posix/Itimer.c
@@ -80,9 +80,10 @@
#elif defined(HAVE_SETITIMER)
-# ifdef THREADED_RTS
+# if defined(THREADED_RTS) || !defined(HAVE_SETITIMER_VIRTUAL)
// Oh dear, we have to use SIGALRM if there's no timer_create and
// we're using the THREADED_RTS. This leads to problems, see bug #850.
+// We also use it if we don't have a virtual timer (trac #2883).
# define ITIMER_SIGNAL SIGALRM
# define ITIMER_FLAVOUR ITIMER_REAL
# else