[CRIU] [PATCH] restore: Don't parse /proc/pid/threads for single-threaded tasks
Pavel Emelyanov
xemul at virtuozzo.com
Thu Apr 20 04:13:44 PDT 2017
We do this to get real pids of the threads, but sometimes
we just know that value.
Signed-off-by: Pavel Emelyanov <xemul at virtuozzo.com>
---
criu/cr-restore.c | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/criu/cr-restore.c b/criu/cr-restore.c
index 7842e16..589dec5 100644
--- a/criu/cr-restore.c
+++ b/criu/cr-restore.c
@@ -1567,8 +1567,12 @@ static int attach_to_tasks(bool root_seized)
if (!task_alive(item))
continue;
- if (parse_threads(item->pid->real, &item->threads, &item->nr_threads))
- return -1;
+ if (item->nr_threads == 1) {
+ item->threads[0].real = item->pid->real;
+ } else {
+ if (parse_threads(item->pid->real, &item->threads, &item->nr_threads))
+ return -1;
+ }
for (i = 0; i < item->nr_threads; i++) {
pid_t pid = item->threads[i].real;
@@ -1620,8 +1624,12 @@ static int catch_tasks(bool root_seized, enum trace_flags *flag)
if (!task_alive(item))
continue;
- if (parse_threads(item->pid->real, &item->threads, &item->nr_threads))
- return -1;
+ if (item->nr_threads == 1) {
+ item->threads[0].real = item->pid->real;
+ } else {
+ if (parse_threads(item->pid->real, &item->threads, &item->nr_threads))
+ return -1;
+ }
for (i = 0; i < item->nr_threads; i++) {
pid_t pid = item->threads[i].real;
--
2.5.5
More information about the CRIU
mailing list