From 99801e72f0c04247548ffce4d53c70bf4e5085d0 Mon Sep 17 00:00:00 2001 From: Andrey Vagin Date: Tue, 24 Feb 2015 16:53:14 +0300 Subject: [PATCH] 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 Signed-off-by: Pavel Emelyanov --- ptrace.c | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/ptrace.c b/ptrace.c index f258a4395..70290eb8a 100644 --- a/ptrace.c +++ b/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;