Commit 98544842 authored by Cyrill Gorcunov's avatar Cyrill Gorcunov Committed by Pavel Emelyanov

parasite: Switch parasite thread leader to use thread helpers

 - the init() now calls for init_thread() to save blocked
   signals mask in per-thread data

 - the fini() now calls for fini_thread() to restore the
   blocked signals, note: we could use thread_leader directly
   but i think calling for fini_thread() is more generic

 - dump_misc() now uses per-thread data
Signed-off-by: 's avatarCyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent e441109e
...@@ -277,13 +277,10 @@ static int dump_itimers(struct parasite_dump_itimers_args *args) ...@@ -277,13 +277,10 @@ static int dump_itimers(struct parasite_dump_itimers_args *args)
return ret; return ret;
} }
static k_rtsigset_t old_blocked;
static int reset_blocked = 0;
static int dump_misc(struct parasite_dump_misc *args) static int dump_misc(struct parasite_dump_misc *args)
{ {
args->brk = sys_brk(0); args->brk = sys_brk(0);
args->blocked = old_blocked; args->blocked = thread_leader->sig_blocked;
args->pid = sys_getpid(); args->pid = sys_getpid();
args->sid = sys_getsid(); args->sid = sys_getsid();
...@@ -405,7 +402,6 @@ static int fini_thread(void) ...@@ -405,7 +402,6 @@ static int fini_thread(void)
static int init(struct parasite_init_args *args) static int init(struct parasite_init_args *args)
{ {
k_rtsigset_t to_block;
int ret; int ret;
if (!args->nr_threads) if (!args->nr_threads)
...@@ -424,6 +420,10 @@ static int init(struct parasite_init_args *args) ...@@ -424,6 +420,10 @@ static int init(struct parasite_init_args *args)
nr_tid_state = args->nr_threads; nr_tid_state = args->nr_threads;
ret = init_thread();
if (ret < 0)
return ret;
tsock = sys_socket(PF_UNIX, SOCK_DGRAM, 0); tsock = sys_socket(PF_UNIX, SOCK_DGRAM, 0);
if (tsock < 0) if (tsock < 0)
return tsock; return tsock;
...@@ -436,14 +436,7 @@ static int init(struct parasite_init_args *args) ...@@ -436,14 +436,7 @@ static int init(struct parasite_init_args *args)
if (ret < 0) if (ret < 0)
return ret; return ret;
ksigfillset(&to_block); return 0;
ret = sys_sigprocmask(SIG_SETMASK, &to_block, &old_blocked, sizeof(k_rtsigset_t));
if (ret < 0)
reset_blocked = ret;
else
reset_blocked = 1;
return ret;
} }
static char proc_mountpoint[] = "proc.crtools"; static char proc_mountpoint[] = "proc.crtools";
...@@ -581,16 +574,16 @@ static int parasite_cfg_log(struct parasite_log_args *args) ...@@ -581,16 +574,16 @@ static int parasite_cfg_log(struct parasite_log_args *args)
static int fini(void) static int fini(void)
{ {
if (reset_blocked == 1) int ret;
sys_sigprocmask(SIG_SETMASK, &old_blocked, NULL, sizeof(k_rtsigset_t));
sys_munmap(tid_state, TID_STATE_SIZE(nr_tid_state)); ret = fini_thread();
sys_munmap(tid_state, TID_STATE_SIZE(nr_tid_state));
log_set_fd(-1); log_set_fd(-1);
sys_close(tsock); sys_close(tsock);
brk_fini(); brk_fini();
return 0; return ret;
} }
int __used parasite_service(unsigned int cmd, void *args) int __used parasite_service(unsigned int cmd, void *args)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment