Loading changes/bug16741 0 → 100644 +3 −0 Original line number Diff line number Diff line o Minor bugfixes: - Check correctly for windows socket errors in the workqueue backend. Fixes bug 16741; bugfix on 0.2.6.3-alpha. src/common/compat.h +3 −0 Original line number Diff line number Diff line Loading @@ -576,6 +576,8 @@ int network_init(void); ((e) == WSAEMFILE || (e) == WSAENOBUFS) /** Return true if e is EADDRINUSE or the local equivalent. */ #define ERRNO_IS_EADDRINUSE(e) ((e) == WSAEADDRINUSE) /** Return true if e is EINTR or the local equivalent */ #define ERRNO_IS_EINTR(e) ((e) == WSAEINTR || 0) int tor_socket_errno(tor_socket_t sock); const char *tor_socket_strerror(int e); #else Loading @@ -586,6 +588,7 @@ const char *tor_socket_strerror(int e); #else #define ERRNO_IS_EAGAIN(e) ((e) == EAGAIN || (e) == EWOULDBLOCK) #endif #define ERRNO_IS_EINTR(e) ((e) == EINTR || 0) #define ERRNO_IS_EINPROGRESS(e) ((e) == EINPROGRESS || 0) #define ERRNO_IS_CONN_EINPROGRESS(e) ((e) == EINPROGRESS || 0) #define ERRNO_IS_ACCEPT_EAGAIN(e) \ Loading src/common/compat_threads.c +16 −5 Original line number Diff line number Diff line Loading @@ -88,7 +88,7 @@ in_main_thread(void) } #if defined(HAVE_EVENTFD) || defined(HAVE_PIPE) /* non-interruptable versions */ /* As write(), but retry on EINTR */ static int write_ni(int fd, const void *buf, size_t n) { Loading @@ -99,6 +99,7 @@ write_ni(int fd, const void *buf, size_t n) goto again; return r; } /* As read(), but retry on EINTR */ static int read_ni(int fd, void *buf, size_t n) { Loading @@ -111,30 +112,32 @@ read_ni(int fd, void *buf, size_t n) } #endif /* non-interruptable versions */ /** As send(), but retry on EINTR. */ static int send_ni(int fd, const void *buf, size_t n, int flags) { int r; again: r = (int) send(fd, buf, n, flags); if (r < 0 && errno == EINTR) if (r < 0 && ERRNO_IS_EINTR(tor_socket_errno(fd))) goto again; return r; } /** As recv(), but retry on EINTR. */ static int recv_ni(int fd, void *buf, size_t n, int flags) { int r; again: r = (int) recv(fd, buf, n, flags); if (r < 0 && errno == EINTR) if (r < 0 && ERRNO_IS_EINTR(tor_socket_errno(fd))) goto again; return r; } #ifdef HAVE_EVENTFD /* Increment the event count on an eventfd <b>fd</b> */ static int eventfd_alert(int fd) { Loading @@ -145,6 +148,7 @@ eventfd_alert(int fd) return 0; } /* Drain all events from an eventfd <b>fd</b>. */ static int eventfd_drain(int fd) { Loading @@ -157,6 +161,7 @@ eventfd_drain(int fd) #endif #ifdef HAVE_PIPE /** Send a byte over a pipe. Return 0 on success or EAGAIN; -1 on error */ static int pipe_alert(int fd) { Loading @@ -166,6 +171,8 @@ pipe_alert(int fd) return 0; } /** Drain all input from a pipe <b>fd</b> and ignore it. Return 0 on * success, -1 on error. */ static int pipe_drain(int fd) { Loading @@ -181,6 +188,8 @@ pipe_drain(int fd) } #endif /** Send a byte on socket <b>fd</b>t. Return 0 on success or EAGAIN, * -1 on error. */ static int sock_alert(tor_socket_t fd) { Loading @@ -190,6 +199,8 @@ sock_alert(tor_socket_t fd) return 0; } /** Drain all the input from a socket <b>fd</b>, and ignore it. Return 0 on * success, -1 on error. */ static int sock_drain(tor_socket_t fd) { Loading src/common/workqueue.c +2 −1 Original line number Diff line number Diff line Loading @@ -473,7 +473,8 @@ replyqueue_process(replyqueue_t *queue) if (queue->alert.drain_fn(queue->alert.read_fd) < 0) { static ratelim_t warn_limit = RATELIM_INIT(7200); log_fn_ratelim(&warn_limit, LOG_WARN, LD_GENERAL, "Failure from drain_fd"); "Failure from drain_fd: %s", tor_socket_strerror(tor_socket_errno(queue->alert.read_fd))); } tor_mutex_acquire(&queue->lock); Loading Loading
changes/bug16741 0 → 100644 +3 −0 Original line number Diff line number Diff line o Minor bugfixes: - Check correctly for windows socket errors in the workqueue backend. Fixes bug 16741; bugfix on 0.2.6.3-alpha.
src/common/compat.h +3 −0 Original line number Diff line number Diff line Loading @@ -576,6 +576,8 @@ int network_init(void); ((e) == WSAEMFILE || (e) == WSAENOBUFS) /** Return true if e is EADDRINUSE or the local equivalent. */ #define ERRNO_IS_EADDRINUSE(e) ((e) == WSAEADDRINUSE) /** Return true if e is EINTR or the local equivalent */ #define ERRNO_IS_EINTR(e) ((e) == WSAEINTR || 0) int tor_socket_errno(tor_socket_t sock); const char *tor_socket_strerror(int e); #else Loading @@ -586,6 +588,7 @@ const char *tor_socket_strerror(int e); #else #define ERRNO_IS_EAGAIN(e) ((e) == EAGAIN || (e) == EWOULDBLOCK) #endif #define ERRNO_IS_EINTR(e) ((e) == EINTR || 0) #define ERRNO_IS_EINPROGRESS(e) ((e) == EINPROGRESS || 0) #define ERRNO_IS_CONN_EINPROGRESS(e) ((e) == EINPROGRESS || 0) #define ERRNO_IS_ACCEPT_EAGAIN(e) \ Loading
src/common/compat_threads.c +16 −5 Original line number Diff line number Diff line Loading @@ -88,7 +88,7 @@ in_main_thread(void) } #if defined(HAVE_EVENTFD) || defined(HAVE_PIPE) /* non-interruptable versions */ /* As write(), but retry on EINTR */ static int write_ni(int fd, const void *buf, size_t n) { Loading @@ -99,6 +99,7 @@ write_ni(int fd, const void *buf, size_t n) goto again; return r; } /* As read(), but retry on EINTR */ static int read_ni(int fd, void *buf, size_t n) { Loading @@ -111,30 +112,32 @@ read_ni(int fd, void *buf, size_t n) } #endif /* non-interruptable versions */ /** As send(), but retry on EINTR. */ static int send_ni(int fd, const void *buf, size_t n, int flags) { int r; again: r = (int) send(fd, buf, n, flags); if (r < 0 && errno == EINTR) if (r < 0 && ERRNO_IS_EINTR(tor_socket_errno(fd))) goto again; return r; } /** As recv(), but retry on EINTR. */ static int recv_ni(int fd, void *buf, size_t n, int flags) { int r; again: r = (int) recv(fd, buf, n, flags); if (r < 0 && errno == EINTR) if (r < 0 && ERRNO_IS_EINTR(tor_socket_errno(fd))) goto again; return r; } #ifdef HAVE_EVENTFD /* Increment the event count on an eventfd <b>fd</b> */ static int eventfd_alert(int fd) { Loading @@ -145,6 +148,7 @@ eventfd_alert(int fd) return 0; } /* Drain all events from an eventfd <b>fd</b>. */ static int eventfd_drain(int fd) { Loading @@ -157,6 +161,7 @@ eventfd_drain(int fd) #endif #ifdef HAVE_PIPE /** Send a byte over a pipe. Return 0 on success or EAGAIN; -1 on error */ static int pipe_alert(int fd) { Loading @@ -166,6 +171,8 @@ pipe_alert(int fd) return 0; } /** Drain all input from a pipe <b>fd</b> and ignore it. Return 0 on * success, -1 on error. */ static int pipe_drain(int fd) { Loading @@ -181,6 +188,8 @@ pipe_drain(int fd) } #endif /** Send a byte on socket <b>fd</b>t. Return 0 on success or EAGAIN, * -1 on error. */ static int sock_alert(tor_socket_t fd) { Loading @@ -190,6 +199,8 @@ sock_alert(tor_socket_t fd) return 0; } /** Drain all the input from a socket <b>fd</b>, and ignore it. Return 0 on * success, -1 on error. */ static int sock_drain(tor_socket_t fd) { Loading
src/common/workqueue.c +2 −1 Original line number Diff line number Diff line Loading @@ -473,7 +473,8 @@ replyqueue_process(replyqueue_t *queue) if (queue->alert.drain_fn(queue->alert.read_fd) < 0) { static ratelim_t warn_limit = RATELIM_INIT(7200); log_fn_ratelim(&warn_limit, LOG_WARN, LD_GENERAL, "Failure from drain_fd"); "Failure from drain_fd: %s", tor_socket_strerror(tor_socket_errno(queue->alert.read_fd))); } tor_mutex_acquire(&queue->lock); Loading