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) \