commit 3e54812463cc8a33236c16a18d1361597e516d71 from: Stefan Sperling via: Thomas Adam date: Thu May 19 13:34:05 2022 UTC Skip poll(2) if an imsgbuf has a non-empty read buffer. commit - e9f1a409ccc66a6fb79a3022695ca78ad26972ea commit + 3e54812463cc8a33236c16a18d1361597e516d71 blob - c0b028f2df10a4790b2d55637533cce65b42ab06 blob + d0da0d1326d22a856516386bcc38b06f9e55d415 --- lib/privsep.c +++ lib/privsep.c @@ -93,9 +93,15 @@ read_imsg(struct imsgbuf *ibuf) const struct got_error *err; size_t n; - err = poll_fd(ibuf->fd, POLLIN, INFTIM); - if (err) - return err; + /* + * There is no imsg API function to tell us whether the + * read buffer still contains pending data :-( + */ + if (ibuf->r.wpos < IMSG_HEADER_SIZE) { + err = poll_fd(ibuf->fd, POLLIN, INFTIM); + if (err) + return err; + } n = imsg_read(ibuf); if (n == -1) {