Skip to content

Fix EPOLLRDHUP/POLLRDHUP mismatch on Linux SPARC/SPARC64 - #407

Open
passgat wants to merge 1 commit into
an-tao:masterfrom
passgat:fix-EPOLLRDHUP-on-SPARC
Open

Fix EPOLLRDHUP/POLLRDHUP mismatch on Linux SPARC/SPARC64#407
passgat wants to merge 1 commit into
an-tao:masterfrom
passgat:fix-EPOLLRDHUP-on-SPARC

Conversation

@passgat

@passgat passgat commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

Fix a build failure reported by Buildroot autobuild for the bootlin-sparc64-glibc configuration:

EpollPoller.cc:41:26: error: static assertion failed:
EPOLLRDHUP != POLLRDHUP

On SPARC/SPARC64, EPOLLRDHUP (0x2000) and POLLRDHUP (0x0800) are different bits, breaking the assumption elsewhere in this file that epoll and poll flags are interchangeable.

Introduce a combined RDHUP value for this architecture and translate it before epoll_ctl() and after epoll_wait(), since revents_ is later tested against POLLRDHUP in Channel::handleEvent() — otherwise half-close detection would silently break at runtime.

This patch is inspired by the equivalent fix in lighttpd: https://redmine.lighttpd.net/issues/3251

Fix a build failure reported by Buildroot autobuild for the
bootlin-sparc64-glibc configuration:

  EpollPoller.cc:41:26: error: static assertion failed:
  EPOLLRDHUP != POLLRDHUP

On SPARC/SPARC64, EPOLLRDHUP (0x2000) and POLLRDHUP (0x0800) are
different bits, breaking the assumption elsewhere in this file that
epoll and poll flags are interchangeable.

Introduce a combined RDHUP value for this architecture and translate
it before epoll_ctl() and after epoll_wait(), since revents_ is later
tested against POLLRDHUP in Channel::handleEvent() — otherwise
half-close detection would silently break at runtime.

This patch is inspired by the equivalent fix in lighttpd:
https://redmine.lighttpd.net/issues/3251

Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant