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
parent
29bd788660
commit
72d8749454
4
chat.c
4
chat.c
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue