Check signals after file descriptors

If a signal happens while processing an FD, it should be handled
immediately, rather than waiting for another poll return.
master
C. McEnroe 2020-02-08 17:04:25 -05:00
parent 29bd788660
commit 72d8749454
1 changed files with 2 additions and 2 deletions

4
chat.c
View File

@ -150,6 +150,8 @@ int main(int argc, char *argv[]) {
while (!self.quit) { while (!self.quit) {
int nfds = poll(fds, 2, -1); int nfds = poll(fds, 2, -1);
if (nfds < 0 && errno != EINTR) err(EX_IOERR, "poll"); if (nfds < 0 && errno != EINTR) err(EX_IOERR, "poll");
if (nfds > 0 && fds[0].revents) uiRead();
if (nfds > 0 && fds[1].revents) ircRecv();
if (signals[SIGHUP]) self.quit = "zzz"; if (signals[SIGHUP]) self.quit = "zzz";
if (signals[SIGINT] || signals[SIGTERM]) break; if (signals[SIGINT] || signals[SIGTERM]) break;
@ -162,8 +164,6 @@ int main(int argc, char *argv[]) {
uiRead(); uiRead();
} }
if (nfds > 0 && fds[0].revents) uiRead();
if (nfds > 0 && fds[1].revents) ircRecv();
uiDraw(); uiDraw();
} }