Hi Florian, > This change adds new test to assess ppoll()'s timeout related > functionality (the struct pollfd does not provide valid fd to wait > for - just wait for timeout). > > To be more specific - two use cases are checked: > - if ppoll() times out immediately when passed struct timespec has > zero values of tv_nsec and tv_sec. > - if ppoll() times out after timeout specified in passed argument > Do you have any more comments regarding this patch? Is it eligible to be pulled to -master? > --- > Changes for v2: > - Remove _GNU_SOURCE definition if not already defined > - Replace clock_gettime with xclock_gettime > - Use FAIL_EXIT1 instead of plain ret value returning from the test > --- > sysdeps/unix/sysv/linux/Makefile | 2 +- > sysdeps/unix/sysv/linux/tst-ppoll.c | 62 > +++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 1 > deletion(-) create mode 100644 sysdeps/unix/sysv/linux/tst-ppoll.c > > diff --git a/sysdeps/unix/sysv/linux/Makefile > b/sysdeps/unix/sysv/linux/Makefile index 7503b356c8..f4029a74ca 100644 > --- a/sysdeps/unix/sysv/linux/Makefile > +++ b/sysdeps/unix/sysv/linux/Makefile > @@ -108,7 +108,7 @@ tests += tst-clone tst-clone2 tst-clone3 > tst-fanotify tst-personality \ test-errno-linux tst-memfd_create > tst-mlock2 tst-pkey \ tst-rlimit-infinity tst-ofdlocks tst-gettid > tst-gettid-kill \ tst-tgkill tst-sysvsem-linux tst-sysvmsg-linux > tst-sysvshm-linux \ > - tst-timerfd > + tst-timerfd tst-ppoll > tests-internal += tst-ofdlocks-compat tst-sigcontext-get_pc > > CFLAGS-tst-sigcontext-get_pc.c = -fasynchronous-unwind-tables > diff --git a/sysdeps/unix/sysv/linux/tst-ppoll.c > b/sysdeps/unix/sysv/linux/tst-ppoll.c new file mode 100644 > index 0000000000..eeff97f103 > --- /dev/null > +++ b/sysdeps/unix/sysv/linux/tst-ppoll.c > @@ -0,0 +1,62 @@ > +/* Test for ppoll timeout > + Copyright (C) 2021 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be > useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + . */ > + > +#include > +#include > +#include > +#include > + > +/* Timeout in seconds for PPOLL. */ > +#define PPOLL_TIMEOUT 2 > +/* Timeout for test program - must be larger than PPOLL_TIMEOUT. */ > +#define TIMEOUT 3 > + > +static int test_ppoll_timeout (int timeout) > +{ > + struct timespec tv0 = { 0, 0 }, tv1 = { 0, 0 }, tv = { 0, 0 }; > + struct pollfd fds = { -1, 0, 0 }; /* Ignore fds - just wait for > timeout. */ > + int ret; > + > + tv.tv_sec = timeout; > + > + xclock_gettime (CLOCK_REALTIME, &tv0); > + > + ret = ppoll (&fds, 1, &tv, 0); > + if (ret != 0) > + FAIL_EXIT1 ("*** ppoll failed: %m\n"); > + > + xclock_gettime (CLOCK_REALTIME, &tv1); > + if (tv0.tv_sec + timeout != tv1.tv_sec) > + FAIL_EXIT1 ("*** ppoll failed to timeout after %d [s]\n", > timeout); + > + return 0; > +} > + > +static int > +do_test (void) > +{ > + /* Check if ppoll exits immediately. */ > + test_ppoll_timeout (0); > + > + /* Check if ppoll exits after specified timeout. */ > + test_ppoll_timeout (PPOLL_TIMEOUT); > + > + return 0; > +} > + > +#include Best regards, Lukasz Majewski -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de