tests: commandhelper: Accept POLLNVAL on macOS

commandhelper hangs indefinitely in poll() on macOS on commandtest test2
and later because POLLNVAL is returned on revents for input file
descriptor opened from /dev/null, i.e this hangs:

  $ tests/commandhelper < /dev/null
  BEGIN STDOUT
  BEGIN STDERR
  ^C

But it works fine with regular stdin:

  $ tests/commandhelper <<< test
  BEGIN STDOUT
  BEGIN STDERR
  test
  test
  END STDOUT
  END STDERR

The issue is mentioned in poll(2):

  BUGS
    The poll() system call currently does not support devices.

With the change all 28 cases in commandtest pass.

Signed-off-by: Roman Bolshakov <r.bolshakov@yadro.com>
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
This commit is contained in:
Roman Bolshakov 2020-10-08 17:02:08 +03:00 committed by Andrea Bolognani
parent 74546bd5fb
commit c3d02040ac

View File

@ -190,7 +190,17 @@ int main(int argc, char **argv) {
}
for (i = 0; i < numpollfds; i++) {
if (fds[i].revents & (POLLIN | POLLHUP | POLLERR)) {
short revents = POLLIN | POLLHUP | POLLERR;
# ifdef __APPLE__
/*
* poll() on /dev/null will return POLLNVAL
* Apple-Feedback: FB8785208
*/
revents |= POLLNVAL;
# endif
if (fds[i].revents & revents) {
fds[i].revents = 0;
got = read(fds[i].fd, buf, sizeof(buf));