Don't use POSIX semaphores if a MONOTONIC clock is available
authorMartin Willi <martin@revosec.ch>
Mon, 20 Aug 2012 15:58:58 +0000 (17:58 +0200)
committerMartin Willi <martin@revosec.ch>
Mon, 20 Aug 2012 16:01:20 +0000 (18:01 +0200)
POSIX semaphores use CLOCK_REALTIME, but our semaphore_t abstraction
expects CLOCK_MONOTONIC based times. Use the mutex/condvar based
fallback if time_monotonic() actuall returns monotonic times.

src/libstrongswan/threading/semaphore.c

index c35cf1e..b785ff9 100644 (file)
 
 #include <library.h>
 
+#if defined(HAVE_CLOCK_GETTIME) && \
+       (defined(HAVE_CONDATTR_CLOCK_MONOTONIC) || \
+        defined(HAVE_PTHREAD_COND_TIMEDWAIT_MONOTONIC))
+/* if we use MONOTONIC times, we can't use POSIX_SEMAPHORES since they use
+ * times based on CLOCK_REALTIME */
+#undef HAVE_SEM_TIMEDWAIT
+#endif /* HAVE_CLOCK_GETTIME && ... */
+
 #ifdef HAVE_SEM_TIMEDWAIT
 #include <semaphore.h>
 #else /* !HAVE_SEM_TIMEDWAIT */