From c1cd6b5e5fdb91f69c4562db63caac613092b27f Mon Sep 17 00:00:00 2001 From: Christopher Covington Date: Wed, 9 Apr 2014 11:13:11 -0400 Subject: [PATCH] Allow dumps of stopped multithreaded processes CRIU can handle stopped multithreaded processes when all threads are stopped. Refine the check to allow this case. Signed-off-by: Christopher Covington Signed-off-by: Pavel Emelyanov --- cr-dump.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/cr-dump.c b/cr-dump.c index 9313a7c21..5e3371e99 100644 --- a/cr-dump.c +++ b/cr-dump.c @@ -833,7 +833,7 @@ static pid_t item_ppid(const struct pstree_item *item) static int seize_threads(struct pstree_item *item, struct pid *threads, int nr_threads) { - int i = 0, ret, j, nr_inprogress; + int i = 0, ret, j, nr_inprogress, nr_stopped = 0; if ((item->state == TASK_DEAD) && (nr_threads > 1)) { pr_err("Zombies with threads are not supported\n"); @@ -889,11 +889,15 @@ static int seize_threads(struct pstree_item *item, } if (ret == TASK_STOPPED) { - pr_err("Stopped threads not supported\n"); - goto err; + nr_stopped++; } } + if (nr_stopped && nr_stopped != nr_inprogress) { + pr_err("Individually stopped threads not supported\n"); + goto err; + } + return nr_inprogress; err: return -1;