[CRIU] [PATCH 2/3] parasite: clean up parasite_dump_thread_seized

Andrey Vagin avagin at openvz.org
Wed Jul 10 09:42:03 EDT 2013


It is never called for thread leaders, because they are dumped by
dump_task_core_all

Signed-off-by: Andrey Vagin <avagin at openvz.org>
---
 parasite-syscall.c | 63 ++++++++++++++++++++++++++----------------------------
 1 file changed, 30 insertions(+), 33 deletions(-)

diff --git a/parasite-syscall.c b/parasite-syscall.c
index 7eb9337..8dcef17 100644
--- a/parasite-syscall.c
+++ b/parasite-syscall.c
@@ -476,47 +476,44 @@ int parasite_dump_thread_seized(struct parasite_ctl *ctl, int id,
 				struct pid *tid, CoreEntry *core)
 {
 	struct parasite_dump_thread *args;
+	pid_t pid = tid->real;
+	user_regs_struct_t regs_orig;
 	int ret;
 
-	args = parasite_args(ctl, struct parasite_dump_thread);
-
-	if (id == 0)
-		ret = parasite_execute_daemon(PARASITE_CMD_DUMP_THREAD, ctl);
-	else {
-		pid_t pid = tid->real;
-		user_regs_struct_t regs_orig;
+	BUG_ON(id == 0); /* Leader is dumped in dump_task_core_all */
 
-		ret = ptrace(PTRACE_GETREGS, pid, NULL, &regs_orig);
-		if (ret) {
-			pr_perror("Can't obtain registers (pid: %d)", pid);
-			return -1;
-		}
+	args = parasite_args(ctl, struct parasite_dump_thread);
 
-		ret = parasite_execute_trap_by_pid(PARASITE_CMD_INIT_THREAD, ctl,
-						pid, &regs_orig,
-						ctl->r_thread_stack, false);
-		if (ret) {
-			pr_err("Can't init thread in parasite %d\n", pid);
-			return -1;
-		}
+	ret = ptrace(PTRACE_GETREGS, pid, NULL, &regs_orig);
+	if (ret) {
+		pr_perror("Can't obtain registers (pid: %d)", pid);
+		return -1;
+	}
 
-		ret = get_task_regs(pid, regs_orig, core);
-		if (ret)
-			pr_err("Can't obtain regs for thread %d\n", pid);
+	ret = parasite_execute_trap_by_pid(PARASITE_CMD_INIT_THREAD, ctl,
+					pid, &regs_orig,
+					ctl->r_thread_stack, false);
+	if (ret) {
+		pr_err("Can't init thread in parasite %d\n", pid);
+		return -1;
+	}
 
-		if (parasite_execute_trap_by_pid(PARASITE_CMD_FINI_THREAD, ctl,
-						pid, &regs_orig,
-						ctl->r_thread_stack, true)) {
-			pr_err("Can't init thread in parasite %d\n", pid);
-			return -1;
-		}
-		if (ret)
-			return -1;
+	ret = get_task_regs(pid, regs_orig, core);
+	if (ret)
+		pr_err("Can't obtain regs for thread %d\n", pid);
 
-		memcpy(&core->thread_core->blk_sigset,
-			&args->blocked, sizeof(k_rtsigset_t));
-		core->thread_core->has_blk_sigset = true;
+	if (parasite_execute_trap_by_pid(PARASITE_CMD_FINI_THREAD, ctl,
+					pid, &regs_orig,
+					ctl->r_thread_stack, true)) {
+		pr_err("Can't init thread in parasite %d\n", pid);
+		return -1;
 	}
+	if (ret)
+		return -1;
+
+	memcpy(&core->thread_core->blk_sigset,
+		&args->blocked, sizeof(k_rtsigset_t));
+	core->thread_core->has_blk_sigset = true;
 
 	CORE_THREAD_ARCH_INFO(core)->clear_tid_addr = encode_pointer(args->tid_addr);
 	tid->virt = args->tid;
-- 
1.8.3.1



More information about the CRIU mailing list