selftests: timers: set-timer-lat: fix hang when std out/err are redirected
authorShuah Khan <shuahkh@osg.samsung.com>
Thu, 21 Sep 2017 19:46:01 +0000 (13:46 -0600)
committerShuah Khan <shuahkh@osg.samsung.com>
Mon, 25 Sep 2017 16:09:06 +0000 (10:09 -0600)
do_timer_oneshot() uses select() as a timer with FD_SETSIZE and readfs
is cleared with FD_ZERO without FD_SET.

When stdout and stderr are redirected, the test hangs in select forever.
Fix the problem calling select() with readfds empty and nfds zero. This
is sufficient for using select() for timer.

With this fix "./set-timer-lat > /dev/null 2>&1" no longer hangs.

Signed-off-by: Shuah Khan <shuahkh@osg.samsung.com>
Acked-by: Greg Hackmann <ghackmann@google.com>
Signed-off-by: Shuah Khan <shuahkh@osg.samsung.com>
tools/testing/selftests/timers/set-timer-lat.c

index 9c92b7bd56410a38a0da0370bbee202f22d0778c..ea1af5dbc7b6d8c29196c51109a401091213bdda 100644 (file)
@@ -228,7 +228,6 @@ int do_timer_oneshot(int clock_id, int flags)
        timer_t tm1;
        const int interval = 0;
        struct timeval timeout;
-       fd_set fds;
        int err;
 
        err = setup_timer(clock_id, flags, interval, &tm1);
@@ -237,9 +236,8 @@ int do_timer_oneshot(int clock_id, int flags)
 
        memset(&timeout, 0, sizeof(timeout));
        timeout.tv_sec = 5;
-       FD_ZERO(&fds);
        do {
-               err = select(FD_SETSIZE, &fds, NULL, NULL, &timeout);
+               err = select(0, NULL, NULL, NULL, &timeout);
        } while (err == -1 && errno == EINTR);
 
        timer_delete(tm1);