[LTP] [PATCH 1/2] lib: Add timeout to TST_PROCESS_STATE_WAIT
Jorik Cronenberg
jcronenberg@suse.de
Thu Jan 23 13:16:23 CET 2020
Hi Yang, thanks for the review!
>
>> Add the possibility to add a timeout to TST_PROCESS_STATE_WAIT.
>> Like checkpoints add TST_PROCESS_STATE_WAIT2()
>> for specifying a timeout. The original TST_PROCESS_STATE_WAIT()
>> works the same as before. Timeout can be specified in milliseconds.
>>
> Hi Jorik
>
> We have tst_process_state_wait2 since commit dbf270c5 ("lib: Add
> tst_process_state_wait2()"), this api has same functions as
> tst_process_state_wait but only return error instead of TBROK.
>
> I think using TST_PROCESS_STATE_WAIT2 is confused and we can only expand
> tst_process_state_wait make it support sleep specifying in milliseconds.
>
> Best Regards
> Yang Xu
I don't think I quite understand what you mean. I can see that using
TST_PROCESS_STATE_WAIT2 is confusing. But I didn't want to touch the
existing TST_PROCESS_STATE_WAIT to ensure all older tests still run the
same. Are you saying i should go through all tests that use
TST_PROCESS_STATE_WAIT and specify that they use a timeout of 0(which
according to a git grep doesn't seem too many, so it wouldn't be too
much effort) and then change TST_PROCESS_STATE_WAIT to include a timeout
or should I just rename TST_PROCESS_STATE_WAIT2 to something that
seperates it more from tst_process_state_wait2?
regards,
Jorik Cronenberg
>> Signed-off-by: Jorik Cronenberg <jcronenberg@suse.de>
>> ---
>> include/tst_process_state.h | 12 ++++++++----
>> lib/tst_process_state.c | 19 ++++++++++++++-----
>> 2 files changed, 22 insertions(+), 9 deletions(-)
>>
>> diff --git a/include/tst_process_state.h b/include/tst_process_state.h
>> index fab0491d9..27a8ffc36 100644
>> --- a/include/tst_process_state.h
>> +++ b/include/tst_process_state.h
>> @@ -47,9 +47,13 @@
>> */
>> #ifdef TST_TEST_H__
>> +#define TST_PROCESS_STATE_WAIT2(pid, state, msec_timeout) \
>> + tst_process_state_wait(__FILE__, __LINE__, NULL, \
>> + (pid), (state), msec_timeout)
>> +
>> #define TST_PROCESS_STATE_WAIT(pid, state) \
>> tst_process_state_wait(__FILE__, __LINE__, NULL, \
>> - (pid), (state))
>> + (pid), (state), 0)
>> #else
>> /*
>> * The same as above but does not use tst_brkm() interface.
>> @@ -65,8 +69,8 @@ int tst_process_state_wait2(pid_t pid, const char
>> state);
>> (pid), (state))
>> #endif
>> -void tst_process_state_wait(const char *file, const int lineno,
>> - void (*cleanup_fn)(void),
>> - pid_t pid, const char state);
>> +int tst_process_state_wait(const char *file, const int lineno,
>> + void (*cleanup_fn)(void), pid_t pid,
>> + const char state, unsigned int msec_timeout);
>> #endif /* TST_PROCESS_STATE__ */
>> diff --git a/lib/tst_process_state.c b/lib/tst_process_state.c
>> index 7a7824959..32b44992c 100644
>> --- a/lib/tst_process_state.c
>> +++ b/lib/tst_process_state.c
>> @@ -28,11 +28,12 @@
>> #include "test.h"
>> #include "tst_process_state.h"
>> -void tst_process_state_wait(const char *file, const int lineno,
>> - void (*cleanup_fn)(void),
>> - pid_t pid, const char state)
>> +int tst_process_state_wait(const char *file, const int lineno,
>> + void (*cleanup_fn)(void), pid_t pid,
>> + const char state, unsigned int msec_timeout)
>> {
>> char proc_path[128], cur_state;
>> + unsigned int msecs = 0;
>> snprintf(proc_path, sizeof(proc_path), "/proc/%i/stat", pid);
>> @@ -41,10 +42,18 @@ void tst_process_state_wait(const char *file,
>> const int lineno,
>> "%*i %*s %c", &cur_state);
>> if (state == cur_state)
>> - return;
>> + break;
>> - usleep(10000);
>> + usleep(1000);
>> + msecs += 1;
>> +
>> + if (msecs >= msec_timeout) {
>> + errno = ETIMEDOUT;
>> + return -1;
>> + }
>> }
>> +
>> + return 0;
>> }
>> int tst_process_state_wait2(pid_t pid, const char state)
>>
>
>
More information about the ltp
mailing list