Dear Community, > This change adds new test to assess select()'s timeout related > functionality (the rdfs set provides valid fd - stderr - but during > normal program operation there is no data to be read, so one just > waits for timeout). > > To be more specific - two use cases are checked: > - if select() times out immediately when passed struct timeval has > zero values of tv_usec and tv_sec. > - if select() times out after timeout specified in passed argument Do you have any comments regarding this patch? > --- > misc/Makefile | 2 +- > misc/tst-select.c | 70 > +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 71 > insertions(+), 1 deletion(-) create mode 100644 misc/tst-select.c > > diff --git a/misc/Makefile b/misc/Makefile > index a8363d4b76..a3545f047e 100644 > --- a/misc/Makefile > +++ b/misc/Makefile > @@ -88,7 +88,7 @@ tests := tst-dirname tst-tsearch tst-fdset > tst-mntent tst-hsearch \ tst-preadvwritev tst-preadvwritev64 > tst-makedev tst-empty \ tst-preadvwritev2 tst-preadvwritev64v2 > tst-warn-wide \ tst-ldbl-warn tst-ldbl-error tst-dbl-efgcvt > tst-ldbl-efgcvt \ > - tst-mntent-autofs tst-syscalls tst-mntent-escape > + tst-mntent-autofs tst-syscalls tst-mntent-escape tst-select > > tests-time64 := tst-pselect-time64 > > diff --git a/misc/tst-select.c b/misc/tst-select.c > new file mode 100644 > index 0000000000..ea776c8880 > --- /dev/null > +++ b/misc/tst-select.c > @@ -0,0 +1,70 @@ > +/* Test for select 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 > +#include > +#include > +#include > + > +#define TST_SELECT_TIMEOUT 1 > +#define TST_SELECT_FD_ERR 2 > + > +static int test_select_timeout (bool zero_tmo) > +{ > + const int fds = TST_SELECT_FD_ERR; > + int timeout = TST_SELECT_TIMEOUT; > + struct timeval to = { 0, 0 }; > + struct timespec ts; > + fd_set rfds; > + > + FD_ZERO (&rfds); > + FD_SET (fds, &rfds); > + > + if (zero_tmo) > + timeout = 0; > + > + to.tv_sec = timeout; > + ts = xclock_now (CLOCK_REALTIME); > + ts = timespec_add (ts, (struct timespec) { timeout, 0 }); > + > + /* Wait for timeout. */ > + int ret = select (fds + 1, &rfds, NULL, NULL, &to); > + if (ret == -1) > + FAIL_EXIT1 ("select failed: %m\n"); > + > + TEST_TIMESPEC_NOW_OR_AFTER (CLOCK_REALTIME, ts); > + > + return 0; > +} > + > +static int > +do_test (void) > +{ > + /* Check if select exits immediately. */ > + test_select_timeout (true); > + > + /* Check if select exits after specified timeout. */ > + test_select_timeout (false); > + > + 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