aboutsummaryrefslogtreecommitdiffstats
path: root/src/libstrongswan/threading/thread.h
diff options
context:
space:
mode:
authorMartin Willi <martin@revosec.ch>2014-11-21 12:49:07 +0100
committerMartin Willi <martin@revosec.ch>2014-11-21 12:49:07 +0100
commitf6f3b0db1154cf0f97f2b26757ae7c42f5629bf3 (patch)
tree5fdb42930d1c23d5ace96af3f74865571a90b234 /src/libstrongswan/threading/thread.h
parente796b88e86a719c03d551318dda359b373496ce5 (diff)
parent89f19ef8763f2139b080efa2de019914e84f7cad (diff)
downloadstrongswan-f6f3b0db1154cf0f97f2b26757ae7c42f5629bf3.tar.bz2
strongswan-f6f3b0db1154cf0f97f2b26757ae7c42f5629bf3.tar.xz
Merge branch 'poll'
Replace relevant uses of select() by poll(). poll(2) avoids the difficulties we have with more than 1024 open file descriptors, and seems to be fairly portable. Fixes #757.
Diffstat (limited to 'src/libstrongswan/threading/thread.h')
-rw-r--r--src/libstrongswan/threading/thread.h63
1 files changed, 2 insertions, 61 deletions
diff --git a/src/libstrongswan/threading/thread.h b/src/libstrongswan/threading/thread.h
index 6abb83411..38275541e 100644
--- a/src/libstrongswan/threading/thread.h
+++ b/src/libstrongswan/threading/thread.h
@@ -21,40 +21,9 @@
#ifndef THREADING_THREAD_H_
#define THREADING_THREAD_H_
-typedef struct thread_t thread_t;
-
-#ifdef __APPLE__
-/* thread_create is a syscall used to create Mach kernel threads and although
- * there are no errors or warnings during compilation or linkage the dynamic
- * linker does not use our implementation, therefore we rename it here
- */
-#define thread_create(main, arg) strongswan_thread_create(main, arg)
+#include <utils/utils.h>
-/* on Mac OS X 10.5 several system calls we use are no cancellation points.
- * fortunately, select isn't one of them, so we wrap some of the others with
- * calls to select(2).
- */
-#include <sys/socket.h>
-#include <sys/select.h>
-
-#define WRAP_WITH_SELECT(func, socket, ...)\
- fd_set rfds; FD_ZERO(&rfds); FD_SET(socket, &rfds);\
- if (select(socket + 1, &rfds, NULL, NULL, NULL) <= 0) { return -1; }\
- return func(socket, __VA_ARGS__)
-
-static inline int cancellable_accept(int socket, struct sockaddr *address,
- socklen_t *address_len)
-{
- WRAP_WITH_SELECT(accept, socket, address, address_len);
-}
-#define accept cancellable_accept
-static inline int cancellable_recvfrom(int socket, void *buffer, size_t length,
- int flags, struct sockaddr *address, socklen_t *address_len)
-{
- WRAP_WITH_SELECT(recvfrom, socket, buffer, length, flags, address, address_len);
-}
-#define recvfrom cancellable_recvfrom
-#endif /* __APPLE__ */
+typedef struct thread_t thread_t;
/**
* Main function of a thread.
@@ -189,32 +158,4 @@ void threads_init();
*/
void threads_deinit();
-
-#ifdef __APPLE__
-
-/*
- * While select() is a cancellation point, it seems that OS X does not honor
- * pending cancellation points when entering the function. We manually test for
- * and honor pending cancellation requests, but this obviously can't prevent
- * some race conditions where the the cancellation happens after the check,
- * but before the select.
- */
-static inline int precancellable_select(int nfds, fd_set *restrict readfds,
- fd_set *restrict writefds, fd_set *restrict errorfds,
- struct timeval *restrict timeout)
-{
- if (thread_cancelability(TRUE))
- {
- thread_cancellation_point();
- }
- else
- {
- thread_cancelability(FALSE);
- }
- return select(nfds, readfds, writefds, errorfds, timeout);
-}
-#define select precancellable_select
-
-#endif /* __APPLE__ */
-
#endif /** THREADING_THREAD_H_ @} */