mirror of
https://github.com/checkpoint-restore/criu
synced 2025-08-31 22:35:33 +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:
committed by
Andrei Vagin
parent
7454615722
commit
1a79b4d686
@@ -391,7 +391,10 @@ static void child_func(void)
|
|||||||
static int ptrace_attach(pid_t pid)
|
static int ptrace_attach(pid_t pid)
|
||||||
{
|
{
|
||||||
if (ptrace(PTRACE_ATTACH, pid, 0, 0) == 0) {
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
pr_perror("Attach to thread %d failed", pid);
|
pr_perror("Attach to thread %d failed", pid);
|
||||||
|
Reference in New Issue
Block a user