diff options
-rw-r--r-- | configure.ac | 13 | ||||
-rw-r--r-- | rts/posix/Itimer.c | 3 |
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 |