mirror of
https://github.com/checkpoint-restore/criu.git
synced 2026-01-23 02:14:37 +00:00
proc: parse /proc/pid/status when a task is stopped (v2)
If we parse /proc/pid/status when a task isn't stopped, we can't be sure that a process state will not be changed. 08:58:48 Test: zdtm/live/user/static/zombie00, Namespace: 1 08:58:48 Dump log : /var/lib/jenkins/jobs/CRIU-dump/workspace/test/dump/ns/user/static/zombie00/114/1/dump.log 08:58:48 --------------------------------- grep Error --------------------------------- 08:58:48 (00.001127) Error (ptrace.c:124): SEIZE 121: task not stopped after seize v2: don't believe into errno (by xemul@) Reported-by: Mr Jenkins Signed-off-by: Andrey Vagin <avagin@openvz.org> Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
This commit is contained in:
parent
9be7769017
commit
99801e72f0
1 changed files with 3 additions and 12 deletions
15
ptrace.c
15
ptrace.c
|
|
@ -80,6 +80,9 @@ int seize_task(pid_t pid, pid_t ppid)
|
|||
* we might nead at that early point.
|
||||
*/
|
||||
|
||||
try_again:
|
||||
ret = wait4(pid, &status, __WALL, NULL);
|
||||
|
||||
ret2 = parse_pid_status(pid, &cr);
|
||||
if (ret2)
|
||||
goto err;
|
||||
|
|
@ -108,18 +111,6 @@ int seize_task(pid_t pid, pid_t ppid)
|
|||
goto err;
|
||||
}
|
||||
|
||||
try_again:
|
||||
ret = wait4(pid, &status, __WALL, NULL);
|
||||
if (ret < 0) {
|
||||
pr_perror("SEIZE %d: can't wait task", pid);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (ret != pid) {
|
||||
pr_err("SEIZE %d: wrong task attached (%d)\n", pid, ret);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (!WIFSTOPPED(status)) {
|
||||
pr_err("SEIZE %d: task not stopped after seize\n", pid);
|
||||
goto err;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue