diff options
author | 2021-03-26 10:01:51 +0000 | |
---|---|---|
committer | 2021-03-26 10:01:51 +0000 | |
commit | 173bcbfa57a012c849435cebd6fc649a0dc2f756 (patch) | |
tree | 5aecebb390e71877b738872704d7448f61950de9 | |
parent | Change the regex for define names. Make more characters available. (diff) | |
download | wireguard-openbsd-173bcbfa57a012c849435cebd6fc649a0dc2f756.tar.xz wireguard-openbsd-173bcbfa57a012c849435cebd6fc649a0dc2f756.zip |
Rewrite poll loop a bit. Put the various message queues into an array
with the same order as the pollfds. This way simple for loops can be
used to setup and handle all cases but POLLIN.
OK tb@
-rw-r--r-- | usr.sbin/rpki-client/main.c | 72 |
1 files changed, 28 insertions, 44 deletions
diff --git a/usr.sbin/rpki-client/main.c b/usr.sbin/rpki-client/main.c index 70b7c6526aa..3d88e299d88 100644 --- a/usr.sbin/rpki-client/main.c +++ b/usr.sbin/rpki-client/main.c @@ -1,4 +1,4 @@ -/* $OpenBSD: main.c,v 1.123 2021/03/25 12:18:45 claudio Exp $ */ +/* $OpenBSD: main.c,v 1.124 2021/03/26 10:01:51 claudio Exp $ */ /* * Copyright (c) 2019 Kristaps Dzonsons <kristaps@bsd.lv> * @@ -837,6 +837,8 @@ suicide(int sig __attribute__((unused))) } +#define NPFD 3 + int main(int argc, char *argv[]) { @@ -845,7 +847,8 @@ main(int argc, char *argv[]) size_t i, id, outsz = 0, talsz = 0; pid_t procpid, rsyncpid, httppid; int fd[2]; - struct pollfd pfd[3]; + struct pollfd pfd[NPFD]; + struct msgbuf *queues[NPFD]; struct roa **out = NULL; struct repo *rp; char *rsync_prog = "openrsync"; @@ -1079,8 +1082,11 @@ main(int argc, char *argv[]) */ pfd[0].fd = rsync; + queues[0] = &rsyncq; pfd[1].fd = proc; + queues[1] = &procq; pfd[2].fd = http; + queues[2] = &httpq; /* * Prime the process with our TAL file. @@ -1096,53 +1102,31 @@ main(int argc, char *argv[]) err(1, "fchdir"); while (entity_queue > 0 && !killme) { - pfd[0].events = POLLIN; - if (rsyncq.queued) - pfd[0].events |= POLLOUT; - pfd[1].events = POLLIN; - if (procq.queued) - pfd[1].events |= POLLOUT; - pfd[2].events = POLLIN; - if (httpq.queued) - pfd[2].events |= POLLOUT; - - if ((c = poll(pfd, 3, INFTIM)) == -1) { + for (i = 0; i < NPFD; i++) { + pfd[i].events = POLLIN; + if (queues[i]->queued) + pfd[i].events |= POLLOUT; + } + + if ((c = poll(pfd, NPFD, INFTIM)) == -1) { if (errno == EINTR) continue; err(1, "poll"); } - if ((pfd[0].revents & (POLLERR|POLLNVAL)) || - (pfd[1].revents & (POLLERR|POLLNVAL)) || - (pfd[2].revents & (POLLERR|POLLNVAL))) - errx(1, "poll: bad fd"); - if ((pfd[0].revents & POLLHUP) || - (pfd[1].revents & POLLHUP) || - (pfd[2].revents & POLLHUP)) - errx(1, "poll: hangup"); - - if (pfd[0].revents & POLLOUT) { - switch (msgbuf_write(&rsyncq)) { - case 0: - errx(1, "write: connection closed"); - case -1: - err(1, "write"); - } - } - if (pfd[1].revents & POLLOUT) { - switch (msgbuf_write(&procq)) { - case 0: - errx(1, "write: connection closed"); - case -1: - err(1, "write"); - } - } - if (pfd[2].revents & POLLOUT) { - switch (msgbuf_write(&httpq)) { - case 0: - errx(1, "write: connection closed"); - case -1: - err(1, "write"); + for (i = 0; i < NPFD; i++) { + if (pfd[i].revents & (POLLERR|POLLNVAL)) + errx(1, "poll[%zu]: bad fd", i); + if (pfd[i].revents & POLLHUP) + errx(1, "poll[%zu]: hangup", i); + if (pfd[i].revents & POLLOUT) { + switch (msgbuf_write(queues[i])) { + case 0: + errx(1, "write[%zu]: " + "connection closed", i); + case -1: + err(1, "write[%zu]", i); + } } } |