openbsd-ports/audio/espeak/patches/patch-src_event_cpp
ajacoutot 992a95f9bf - bring in 2 patches from pkgsrc to actually make espeak work live (and
not only be able to save text to speech in wav file)
- rework the src Makefile
- use system portaudio.h instead of the bundled one
2009-04-16 16:39:17 +00:00

35 lines
1.0 KiB
Plaintext

$OpenBSD: patch-src_event_cpp,v 1.1 2009/04/16 16:39:17 ajacoutot Exp $
--- src/event.cpp.orig Mon Dec 22 23:36:40 2008
+++ src/event.cpp Thu Apr 16 18:20:56 2009
@@ -40,6 +40,12 @@
//>
//<decls and function prototypes
+#ifndef timespeccmp
+#define timespeccmp(tvp, uvp, cmp) \
+ (((tvp)->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;
@@ -400,10 +406,14 @@ ENTER("sleep_until_timeout_or_stop_request");
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);