* For now, we're using (1), but this needs a better solution. --SDM
*/
-#if defined(HAVE_TIMER_CREATE) && defined(HAVE_TIMER_SETTIME)
+#if defined(USE_TIMER_CREATE)
-# define USE_TIMER_CREATE
# define ITIMER_SIGNAL SIGVTALRM
# ifdef THREADED_RTS
# define TIMER_FLAVOUR CLOCK_REALTIME
#elif defined(HAVE_SETITIMER)
-# define USE_ITIMER
# ifdef THREADED_RTS
// 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.
getourtimeofday(void)
{
struct timeval tv;
+ nat interval;
+ interval = RtsFlags.MiscFlags.tickInterval;
+ if (interval == 0) { interval = 50; }
gettimeofday(&tv, (struct timezone *) NULL);
// cast to lnat because nat may be 64 bit when int is only 32 bit
- return ((lnat)tv.tv_sec * 1000 / RtsFlags.MiscFlags.tickInterval +
- (lnat)tv.tv_usec / (RtsFlags.MiscFlags.tickInterval * 1000));
+ return ((lnat)tv.tv_sec * 1000 / interval +
+ (lnat)tv.tv_usec / (interval * 1000));
}