$NetBSD: patch-aa,v 1.2 2007/08/04 12:52:57 joerg Exp $ --- event.cpp.orig 2007-07-16 17:54:23.000000000 +0000 +++ event.cpp @@ -40,6 +40,12 @@ //> //tv_sec == (uvp)->tv_sec) ? \ + ((tvp)->tv_nsec cmp (uvp)->tv_nsec) : \ + ((tvp)->tv_sec cmp (uvp)->tv_sec)) +#endif // my_mutex: protects my_thread_is_talking, static pthread_mutex_t my_mutex; @@ -398,10 +404,14 @@ ENTER("sleep_until_timeout_or_stop_reque to.tv_sec, to.tv_nsec, ts.tv_sec, ts.tv_nsec); - while ((err = sem_timedwait(&my_sem_stop_is_required, &ts)) == -1 - && errno == EINTR) + while ((err = sem_trywait(&my_sem_stop_is_required)) == -1 + && (errno == EINTR || errno == EAGAIN)) { - continue; // Restart when interrupted by handler + struct timespec help; + clock_gettime2(&help); + if (timespeccmp(&help, &ts, >=)) + break; + sched_yield(); } assert (gettimeofday(&tv, NULL) != -1);