2
0
mirror of https://github.com/checkpoint-restore/criu synced 2025-08-30 22:05:36 +00:00

zdtm/s390x_regs_check: Fix wait() for threads

For older kernels (e.g. RHEL7 with 3.10) it seems that wait(NULL) after
ptrace(PTHREAD_ATTACH) does not work properly for threads that have
to be created via clone().

Fix this by using waitpid() with the __WALL flag.

>From the waitpid() man page:

 __WALL (since Linux 2.4)
 Wait  for  all  children, regardless of type ("clone" or "non-clone").

Reported-by: Adrian Reber <areber@redhat.com>
Signed-off-by: Michael Holzheu <holzheu@linux.vnet.ibm.com>
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
This commit is contained in:
Michael Holzheu
2017-09-27 17:21:48 +02:00
committed by Andrei Vagin
parent 7454615722
commit 1a79b4d686

View File

@@ -391,7 +391,10 @@ static void child_func(void)
static int ptrace_attach(pid_t pid)
{
if (ptrace(PTRACE_ATTACH, pid, 0, 0) == 0) {
wait(NULL);
if (waitpid(pid, NULL, __WALL) < 0) {
pr_perror("Waiting for thread %d failed", pid);
return -1;
}
return 0;
}
pr_perror("Attach to thread %d failed", pid);