diff options
-rw-r--r-- | configure.in | 26 | ||||
-rw-r--r-- | src/signaler.cpp | 78 | ||||
-rw-r--r-- | src/signaler.hpp | 6 |
3 files changed, 1 insertions, 109 deletions
diff --git a/configure.in b/configure.in index b31f9d5..b95a367 100644 --- a/configure.in +++ b/configure.in @@ -228,32 +228,6 @@ AC_HEADER_STDC AC_CHECK_HEADERS(errno.h arpa/inet.h netinet/tcp.h netinet/in.h stddef.h \ stdlib.h string.h sys/socket.h sys/time.h unistd.h limits.h) -# Force not to use eventfd -AC_ARG_ENABLE([eventfd], [AS_HELP_STRING([--disable-eventfd], [disable eventfd [default=no]])], - [disable_eventfd=yes], [disable_eventfd=no]) - -eventfd_headers="no" -eventfd_can_run="no" - -if test "x$disable_eventfd" != "xyes"; then - # Check if we have eventfd.h header file. - AC_CHECK_HEADERS(sys/eventfd.h, [eventfd_headers=yes]) - - AC_MSG_CHECKING([for sys/eventfd.h functionality]) - - AC_RUN_IFELSE( - [AC_LANG_PROGRAM([[#include <sys/eventfd.h> - #include <assert.h>]], - [[int fd = eventfd (0, 0); assert (fd != -1);]])], - [eventfd_can_run=yes], [], eventfd_can_run=no) - - AC_MSG_RESULT([$eventfd_can_run]) - - if test "x$eventfd_headers" = "xyes" -a "x$eventfd_can_run" = "xyes"; then - AC_DEFINE(ZMQ_HAVE_EVENTFD, 1,[Have eventfd extension.]) - fi -fi - # Check if we have ifaddrs.h header file. AC_CHECK_HEADERS(ifaddrs.h, [AC_DEFINE(ZMQ_HAVE_IFADDRS, 1, [Have ifaddrs.h header.])]) diff --git a/src/signaler.cpp b/src/signaler.cpp index a98f1fe..1d3b32f 100644 --- a/src/signaler.cpp +++ b/src/signaler.cpp @@ -32,83 +32,7 @@ #include <fcntl.h> #endif -#if defined ZMQ_HAVE_EVENTFD - -#include <sys/eventfd.h> - -zmq::signaler_t::signaler_t () -{ - // Create eventfd object. - fd = eventfd (0, 0); - errno_assert (fd != -1); - - // Set to non-blocking mode. - int flags = fcntl (fd, F_GETFL, 0); - if (flags == -1) - flags = 0; - int rc = fcntl (fd, F_SETFL, flags | O_NONBLOCK); - errno_assert (rc != -1); -} - -zmq::signaler_t::~signaler_t () -{ - int rc = close (fd); - errno_assert (rc != -1); -} - -void zmq::signaler_t::signal (int signal_) -{ - zmq_assert (signal_ >= 0 && signal_ < 64); - uint64_t inc = 1; - inc <<= signal_; - ssize_t sz = write (fd, &inc, sizeof (uint64_t)); - errno_assert (sz == sizeof (uint64_t)); -} - -uint64_t zmq::signaler_t::poll () -{ - // Set to blocking mode. - int flags = fcntl (fd, F_GETFL, 0); - if (flags == -1) - flags = 0; - int rc = fcntl (fd, F_SETFL, flags & ~O_NONBLOCK); - errno_assert (rc != -1); - - uint64_t signals; - ssize_t sz; - while (true) { - sz = read (fd, &signals, sizeof (uint64_t)); - if (sz == -1) { - if (errno == EAGAIN || errno == EINTR) - continue; - errno_assert (false); - } - break; - } - - // Set to non-blocking mode. - rc = fcntl (fd, F_SETFL, flags | O_NONBLOCK); - errno_assert (rc != -1); - - return signals; -} - -uint64_t zmq::signaler_t::check () -{ - uint64_t signals; - ssize_t sz = read (fd, &signals, sizeof (uint64_t)); - if (sz == -1 && (errno == EAGAIN || errno == EINTR)) - return 0; - errno_assert (sz != -1); - return signals; -} - -zmq::fd_t zmq::signaler_t::get_fd () -{ - return fd; -} - -#elif defined ZMQ_HAVE_WINDOWS +#if defined ZMQ_HAVE_WINDOWS zmq::signaler_t::signaler_t () { diff --git a/src/signaler.hpp b/src/signaler.hpp index 29f2ff6..f239771 100644 --- a/src/signaler.hpp +++ b/src/signaler.hpp @@ -58,17 +58,11 @@ namespace zmq // meantime, we'll create the socket pair manually. static int socketpair (int domain_, int type_, int protocol_, int sv_ [2]); - #endif -#if defined ZMQ_HAVE_EVENTFD - // Eventfd descriptor. - fd_t fd; -#else // Write & read end of the socketpair. fd_t w; fd_t r; -#endif // Disable copying of fd_signeler object. signaler_t (const signaler_t&); |