[CRIU] [PATCH v2] zdtm: Fix fd01 cleanup

Andrei Vagin avagin at virtuozzo.com
Thu Feb 1 20:58:27 MSK 2018


Applied, thanks!

On Thu, Feb 01, 2018 at 05:54:12PM +0300, Kirill Tkhai wrote:
> zdtm: Fix fd01 cleanup
> 
> From: Kirill Tkhai <ktkhai at virtuozzo.com>
> 
> 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 |   19 +++++++++++++++----
>  1 file changed, 15 insertions(+), 4 deletions(-)
> 
> diff --git a/test/zdtm/static/fd01.c b/test/zdtm/static/fd01.c
> index 7f0256a03..4e7875110 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,9 +103,12 @@ 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) {
> +		if (!WIFEXITED(status) || WEXITSTATUS(status)) {
> +			fail("Wrong exit status: %d", status);
> +			exit(1);
> +		}
>  	}
>  
>  	pass();


More information about the CRIU mailing list