thread: Test for pending cancellation requests before poll()ing on OS X
authorMartin Willi <martin@revosec.ch>
Wed, 5 Nov 2014 18:30:45 +0000 (19:30 +0100)
committerMartin Willi <martin@revosec.ch>
Fri, 21 Nov 2014 11:02:07 +0000 (12:02 +0100)
As we are now using poll(2) instead of select(2), we need the work-around from
76dc329e for poll() as well.

src/libstrongswan/threading/thread.h

index 6abb834..c634232 100644 (file)
@@ -215,6 +215,26 @@ static inline int precancellable_select(int nfds, fd_set *restrict readfds,
 }
 #define select precancellable_select
 
+#include <poll.h>
+
+/*
+ * The same as to select(2) applies to poll(2)
+ */
+static inline int precancellable_poll(struct pollfd fds[], nfds_t nfds,
+                                                                         int timeout)
+{
+       if (thread_cancelability(TRUE))
+       {
+               thread_cancellation_point();
+       }
+       else
+       {
+               thread_cancelability(FALSE);
+       }
+       return poll(fds, nfds, timeout);
+}
+#define poll precancellable_poll
+
 #endif /* __APPLE__ */
 
 #endif /** THREADING_THREAD_H_ @} */