Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1737045 > unrolled thread

[PATCH] selftests: timers: set-timer-lat: fix hang when std out/err are redirected

Started byShuah Khan <shuahkh@osg.samsung.com>
First post2017-09-21 22:20 +0200
Last post2017-09-22 19:40 +0200
Articles 4 — 3 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH] selftests: timers: set-timer-lat: fix hang when std out/err are redirected Shuah Khan <shuahkh@osg.samsung.com> - 2017-09-21 22:20 +0200
    Re: [PATCH] selftests: timers: set-timer-lat: fix hang when std  out/err are redirected Shuah Khan <shuahkh@osg.samsung.com> - 2017-09-22 16:50 +0200
      Re: [PATCH] selftests: timers: set-timer-lat: fix hang when std  out/err are redirected Greg Hackmann <ghackmann@google.com> - 2017-09-22 17:50 +0200
      Re: [PATCH] selftests: timers: set-timer-lat: fix hang when std  out/err are redirected John Stultz <john.stultz@linaro.org> - 2017-09-22 19:40 +0200

#1737045 — [PATCH] selftests: timers: set-timer-lat: fix hang when std out/err are redirected

FromShuah Khan <shuahkh@osg.samsung.com>
Date2017-09-21 22:20 +0200
Subject[PATCH] selftests: timers: set-timer-lat: fix hang when std out/err are redirected
Message-ID<usg6Z-5wE-3@gated-at.bofh.it>
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>
---
 tools/testing/selftests/timers/set-timer-lat.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/tools/testing/selftests/timers/set-timer-lat.c b/tools/testing/selftests/timers/set-timer-lat.c
index ab2fe225e051..3c248f0dc0d5 100644
--- a/tools/testing/selftests/timers/set-timer-lat.c
+++ b/tools/testing/selftests/timers/set-timer-lat.c
@@ -229,7 +229,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);
@@ -238,9 +237,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);
-- 
2.11.0

[toc] | [next] | [standalone]


#1737551 — Re: [PATCH] selftests: timers: set-timer-lat: fix hang when std out/err are redirected

FromShuah Khan <shuahkh@osg.samsung.com>
Date2017-09-22 16:50 +0200
SubjectRe: [PATCH] selftests: timers: set-timer-lat: fix hang when std out/err are redirected
Message-ID<usxrc-7fo-29@gated-at.bofh.it>
In reply to#1737045
Hi John/Greg,

On 09/21/2017 02:10 PM, Shuah Khan wrote:
> 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>
> ---
>  tools/testing/selftests/timers/set-timer-lat.c | 4 +---
>  1 file changed, 1 insertion(+), 3 deletions(-)
> 
> diff --git a/tools/testing/selftests/timers/set-timer-lat.c b/tools/testing/selftests/timers/set-timer-lat.c
> index ab2fe225e051..3c248f0dc0d5 100644
> --- a/tools/testing/selftests/timers/set-timer-lat.c
> +++ b/tools/testing/selftests/timers/set-timer-lat.c
> @@ -229,7 +229,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);
> @@ -238,9 +237,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);
> 

I assume you are good with this fix. I plan to apply it to linux-kselftest fixes
today. Please let me know if you have any objections.

thanks,
-- Shuah

[toc] | [prev] | [next] | [standalone]


#1737587 — Re: [PATCH] selftests: timers: set-timer-lat: fix hang when std out/err are redirected

FromGreg Hackmann <ghackmann@google.com>
Date2017-09-22 17:50 +0200
SubjectRe: [PATCH] selftests: timers: set-timer-lat: fix hang when std out/err are redirected
Message-ID<usynf-7Ox-7@gated-at.bofh.it>
In reply to#1737551
On 09/22/2017 07:42 AM, Shuah Khan wrote:
> Hi John/Greg,
> 
> On 09/21/2017 02:10 PM, Shuah Khan wrote:
>> 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>
>> ---
>>   tools/testing/selftests/timers/set-timer-lat.c | 4 +---
>>   1 file changed, 1 insertion(+), 3 deletions(-)
>>
>> diff --git a/tools/testing/selftests/timers/set-timer-lat.c b/tools/testing/selftests/timers/set-timer-lat.c
>> index ab2fe225e051..3c248f0dc0d5 100644
>> --- a/tools/testing/selftests/timers/set-timer-lat.c
>> +++ b/tools/testing/selftests/timers/set-timer-lat.c
>> @@ -229,7 +229,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);
>> @@ -238,9 +237,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);
>>
> 
> I assume you are good with this fix. I plan to apply it to linux-kselftest fixes
> today. Please let me know if you have any objections.
> 
> thanks,
> -- Shuah
> 

Thanks for looking into this.

Acked-by: Greg Hackmann <ghackmann@google.com>

[toc] | [prev] | [next] | [standalone]


#1737710 — Re: [PATCH] selftests: timers: set-timer-lat: fix hang when std out/err are redirected

FromJohn Stultz <john.stultz@linaro.org>
Date2017-09-22 19:40 +0200
SubjectRe: [PATCH] selftests: timers: set-timer-lat: fix hang when std out/err are redirected
Message-ID<usA5I-uT-11@gated-at.bofh.it>
In reply to#1737551
On Fri, Sep 22, 2017 at 7:42 AM, Shuah Khan <shuahkh@osg.samsung.com> wrote:
> Hi John/Greg,
>
> On 09/21/2017 02:10 PM, Shuah Khan wrote:
>> 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>
>> ---
>>  tools/testing/selftests/timers/set-timer-lat.c | 4 +---
>>  1 file changed, 1 insertion(+), 3 deletions(-)
>>
>> diff --git a/tools/testing/selftests/timers/set-timer-lat.c b/tools/testing/selftests/timers/set-timer-lat.c
>> index ab2fe225e051..3c248f0dc0d5 100644
>> --- a/tools/testing/selftests/timers/set-timer-lat.c
>> +++ b/tools/testing/selftests/timers/set-timer-lat.c
>> @@ -229,7 +229,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);
>> @@ -238,9 +237,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);
>>
>
> I assume you are good with this fix. I plan to apply it to linux-kselftest fixes
> today. Please let me know if you have any objections.

No objections from me, just has been a busy few days and haven't had a
chance to test.

thanks
-john

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web