From fef07138b35e0cc1a174c65db0d19226cbbbe7eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Tue, 5 Nov 2019 09:23:13 +0100 Subject: [PATCH] terminal: ptmx: ignore *both* EPOLLIN and EPOLLOUT on EPOLLHUP --- terminal.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/terminal.c b/terminal.c index e9368703..b7523d1b 100644 --- a/terminal.c +++ b/terminal.c @@ -117,15 +117,21 @@ fdm_ptmx(struct fdm *fdm, int fd, int events, void *data) { struct terminal *term = data; - if (unlikely(events & EPOLLOUT)) { + bool pollin = events & EPOLLIN; + bool pollout = events & EPOLLOUT; + bool hup = events & EPOLLHUP; + + if (hup) { + /* TODO: should we *not* ignore pollin? */ + return term_shutdown(term); + } + + if (pollout) { if (!fdm_ptmx_out(fdm, fd, events, data)) return false; } - if (unlikely((events & EPOLLHUP) && !(events & EPOLLIN))) - return term_shutdown(term); - - if (unlikely(!(events & EPOLLIN))) + if (!pollin) return true; uint8_t buf[24 * 1024];