[CRIU] [PATCH] zdtm: Fix fd01 cleanup
Andrei Vagin
avagin at virtuozzo.com
Wed Jan 31 21:20:35 MSK 2018
On Tue, Jan 30, 2018 at 06:19:31PM +0300, Kirill Tkhai wrote:
> waitpid() does not return child pid, when child has not exited.
> So, we can't use it to find pids of children.
>
> Signed-off-by: Kirill Tkhai <ktkhai at virtuozzo.com>
> ---
> test/zdtm/static/fd01.c | 17 ++++++++++++-----
> 1 file changed, 12 insertions(+), 5 deletions(-)
>
> diff --git a/test/zdtm/static/fd01.c b/test/zdtm/static/fd01.c
> index 7f0256a03..390d9d126 100644
> --- a/test/zdtm/static/fd01.c
> +++ b/test/zdtm/static/fd01.c
> @@ -22,11 +22,19 @@ int main(int argc, char **argv)
> unsigned int i, max_nr, flags;
> int fd, status, ret;
> struct rlimit rlim;
> + futex_t *futex;
> char buf[16];
> pid_t pid;
>
> test_init(argc, argv);
>
> + futex = mmap(NULL, sizeof(*futex), PROT_WRITE | PROT_READ, MAP_ANONYMOUS|MAP_SHARED, -1, 0);
> + if (futex == MAP_FAILED) {
> + fail("mmap");
> + exit(1);
> + }
> + futex_init(futex);
> +
> fd = open("/proc/sys/fs/nr_open", O_RDONLY);
> if (fd < 0) {
> fail("Can't open /proc/sys/fs/nr_open");
> @@ -86,7 +94,7 @@ int main(int argc, char **argv)
> fail("fork");
> exit(1);
> } else if (!pid) {
> - pause();
> + futex_wait_while(futex, 0);
> exit(0);
> }
> }
> @@ -95,10 +103,9 @@ int main(int argc, char **argv)
> test_waitsig();
>
> /* Cleanup */
> - while ((pid = waitpid(-1, &status, WNOHANG)) > 0) {
> - if (kill(pid, SIGTERM) == 0)
> - waitpid(-1, &status, 0); /* Ignore errors */
> - }
> + futex_set_and_wake(futex, 1);
> + while (wait(&status) > 0) /* Ignore errors */
> + ;
Pls, check an exit code from children, otherwise it isn't a test,
because it nevel fails. In addition, it would be good if you add
basic checks to be sure that file descriptors are restored correctly.
>
> pass();
>
>
More information about the CRIU
mailing list