Commit 9b656a47 authored by Andrey Vagin's avatar Andrey Vagin Committed by Pavel Emelyanov

dump: dumping signals when a task is stopped

Currently it's always stopped, but it will be changed, when a parasite
will be executed as a daemon.
Signed-off-by: 's avatarAndrey Vagin <avagin@openvz.org>
Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent 294d62dd
...@@ -1147,6 +1147,8 @@ static int dump_signal_queue(pid_t tid, int fd, bool group) ...@@ -1147,6 +1147,8 @@ static int dump_signal_queue(pid_t tid, int fd, bool group)
siginfo_t siginfo[32]; /* One page or all non-rt signals */ siginfo_t siginfo[32]; /* One page or all non-rt signals */
int ret, i = 0, j, nr; int ret, i = 0, j, nr;
pr_debug("Dump %s signals of %d\n", group ? "shared" : "private", tid);
arg.nr = sizeof(siginfo) / sizeof(siginfo_t); arg.nr = sizeof(siginfo) / sizeof(siginfo_t);
arg.flags = 0; arg.flags = 0;
if (group) if (group)
...@@ -1207,14 +1209,11 @@ static int dump_task_threads(struct parasite_ctl *parasite_ctl, ...@@ -1207,14 +1209,11 @@ static int dump_task_threads(struct parasite_ctl *parasite_ctl,
for (i = 0; i < item->nr_threads; i++) { for (i = 0; i < item->nr_threads; i++) {
/* Leader is already dumped */ /* Leader is already dumped */
if (item->pid.real == item->threads[i].real) if (item->pid.real == item->threads[i].real) {
item->threads[i].virt = item->pid.virt; item->threads[i].virt = item->pid.virt;
else { continue;
if (dump_task_thread(parasite_ctl, item, i))
return -1;
} }
if (dump_task_thread(parasite_ctl, item, i))
if (dump_thread_signals(&item->threads[i]))
return -1; return -1;
} }
...@@ -1390,7 +1389,7 @@ static int dump_one_task(struct pstree_item *item) ...@@ -1390,7 +1389,7 @@ static int dump_one_task(struct pstree_item *item)
pid_t pid = item->pid.real; pid_t pid = item->pid.real;
struct vm_area_list vmas; struct vm_area_list vmas;
struct parasite_ctl *parasite_ctl; struct parasite_ctl *parasite_ctl;
int ret = -1; int i, ret = -1;
struct parasite_dump_misc misc; struct parasite_dump_misc misc;
struct cr_fdset *cr_fdset = NULL; struct cr_fdset *cr_fdset = NULL;
struct parasite_drain_fd *dfds; struct parasite_drain_fd *dfds;
...@@ -1564,6 +1563,12 @@ static int dump_one_task(struct pstree_item *item) ...@@ -1564,6 +1563,12 @@ static int dump_one_task(struct pstree_item *item)
goto err_cure; goto err_cure;
} }
for (i = 0; i < item->nr_threads; i++) {
ret = dump_thread_signals(&item->threads[i]);
if (ret)
goto err;
}
close_cr_fdset(&cr_fdset); close_cr_fdset(&cr_fdset);
err: err:
close_pid_proc(); close_pid_proc();
......
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