From: Nick Mathewson Date: Sat, 12 Jan 2013 00:37:34 +0000 (-0800) Subject: When EWOULDBLOCK is not EAGAIN, treat it as equivalent to it X-Git-Tag: release-2.1.3-alpha~58 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=bf7a0ff26808199ec68b86bb78c65fc21ba770f9;p=libevent When EWOULDBLOCK is not EAGAIN, treat it as equivalent to it Acording to http://stackoverflow.com/questions/7003234/which-systems-define-eagain-and-ewouldblock-as-different-values there are some older unixes that distinguish these error.s --- diff --git a/event.c b/event.c index ce2828fe..fb20f696 100644 --- a/event.c +++ b/event.c @@ -2157,7 +2157,7 @@ evthread_notify_base_default(struct event_base *base) #else r = write(base->th_notify_fd[1], buf, 1); #endif - return (r < 0 && errno != EAGAIN) ? -1 : 0; + return (r < 0 && ! EVUTIL_ERR_IS_EAGAIN(errno)) ? -1 : 0; } #ifdef EVENT__HAVE_EVENTFD diff --git a/util-internal.h b/util-internal.h index fa29f271..f52ae3f4 100644 --- a/util-internal.h +++ b/util-internal.h @@ -79,15 +79,23 @@ extern "C" { #ifndef _WIN32 +#if EAGAIN == EWOULDBLOCK +#define EVUTIL_ERR_IS_EAGAIN(e) \ + ((e) == EAGAIN) +#else +#define EVUTIL_ERR_IS_EAGAIN(e) \ + ((e) == EAGAIN || (e) == EWOULDBLOCK) +#endif + /* True iff e is an error that means a read/write operation can be retried. */ #define EVUTIL_ERR_RW_RETRIABLE(e) \ - ((e) == EINTR || (e) == EAGAIN) + ((e) == EINTR || EVUTIL_ERR_IS_EAGAIN(e)) /* True iff e is an error that means an connect can be retried. */ #define EVUTIL_ERR_CONNECT_RETRIABLE(e) \ ((e) == EINTR || (e) == EINPROGRESS) /* True iff e is an error that means a accept can be retried. */ #define EVUTIL_ERR_ACCEPT_RETRIABLE(e) \ - ((e) == EINTR || (e) == EAGAIN || (e) == ECONNABORTED) + ((e) == EINTR || EVUTIL_ERR_IS_EAGAIN(e) || (e) == ECONNABORTED) /* True iff e is an error that means the connection was refused */ #define EVUTIL_ERR_CONNECT_REFUSED(e) \