[CRIU] [PATCH 06/22] parasite: Initialize tid_state_s::real on parasite bootstrap
Andrey Vagin
avagin at openvz.org
Wed May 8 09:28:33 EDT 2013
From: Cyrill Gorcunov <gorcunov at openvz.org>
Signed-off-by: Cyrill Gorcunov <gorcunov at openvz.org>
Signed-off-by: Andrey Vagin <avagin at openvz.org>
---
include/parasite.h | 1 +
parasite-syscall.c | 5 +++++
pie/parasite.c | 7 ++++---
3 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/include/parasite.h b/include/parasite.h
index 5e4143c..becee67 100644
--- a/include/parasite.h
+++ b/include/parasite.h
@@ -47,6 +47,7 @@ struct parasite_init_args {
struct sockaddr_un p_addr;
int nr_threads;
+ pid_t real;
};
struct parasite_log_args {
diff --git a/parasite-syscall.c b/parasite-syscall.c
index 205e41e..505c264 100644
--- a/parasite-syscall.c
+++ b/parasite-syscall.c
@@ -296,6 +296,7 @@ static int parasite_init(struct parasite_ctl *ctl, pid_t pid, int nr_threads)
args->h_addr_len = gen_parasite_saddr(&args->h_addr, getpid());
args->p_addr_len = gen_parasite_saddr(&args->p_addr, pid);
args->nr_threads = nr_threads;
+ args->real = pid;
if (sock == -1) {
int rst = -1;
@@ -538,12 +539,16 @@ int parasite_get_proc_fd_seized(struct parasite_ctl *ctl)
int parasite_init_threads_seized(struct parasite_ctl *ctl, struct pstree_item *item)
{
+ struct parasite_init_args *args;
int ret = 0, i;
+ args = parasite_args(ctl, struct parasite_init_args);
+
for (i = 0; i < item->nr_threads; i++) {
if (item->pid.real == item->threads[i].real)
continue;
+ args->real = item->threads[i].real;
ret = parasite_execute_trap_by_pid(PARASITE_CMD_INIT_THREAD, ctl,
item->threads[i].real);
if (ret) {
diff --git a/pie/parasite.c b/pie/parasite.c
index e7e6455..93260fe 100644
--- a/pie/parasite.c
+++ b/pie/parasite.c
@@ -211,7 +211,7 @@ static int dump_thread(struct parasite_dump_thread *args)
return 0;
}
-static int init_thread(void)
+static int init_thread(struct parasite_init_args *args)
{
k_rtsigset_t to_block;
int ret;
@@ -226,6 +226,7 @@ static int init_thread(void)
if (ret >= 0)
tid_state[next_tid_state].use_sig_blocked = true;
tid_state[next_tid_state].tid = sys_gettid();
+ tid_state[next_tid_state].real = args->real;
next_tid_state++;
@@ -263,7 +264,7 @@ static int init(struct parasite_init_args *args)
nr_tid_state = args->nr_threads;
- ret = init_thread();
+ ret = init_thread(args);
if (ret < 0)
return ret;
@@ -435,7 +436,7 @@ int __used parasite_service(unsigned int cmd, void *args)
case PARASITE_CMD_INIT:
return init(args);
case PARASITE_CMD_INIT_THREAD:
- return init_thread();
+ return init_thread(args);
case PARASITE_CMD_FINI:
return fini();
case PARASITE_CMD_FINI_THREAD:
--
1.8.2
More information about the CRIU
mailing list