[LTP] [PATCH 1/2] lib: Add timeout to TST_PROCESS_STATE_WAIT
Yang Xu
xuyang2018.jy@cn.fujitsu.com
Thu Jan 23 07:21:14 CET 2020
> 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
> 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