Commit c60f01b9 authored by Cyrill Gorcunov's avatar Cyrill Gorcunov

dump: Get rid of global pstree_list

Signed-off-by: 's avatarCyrill Gorcunov <gorcunov@gmail.com>
parent a0e37e77
...@@ -54,23 +54,22 @@ static FILE *fopen_proc(char *fmt, char *mode, ...) ...@@ -54,23 +54,22 @@ static FILE *fopen_proc(char *fmt, char *mode, ...)
} }
static LIST_HEAD(vma_area_list); static LIST_HEAD(vma_area_list);
static LIST_HEAD(pstree_list);
static char big_buffer[PATH_MAX]; static char big_buffer[PATH_MAX];
static struct parasite_ctl *parasite_ctl; static struct parasite_ctl *parasite_ctl;
static char loc_buf[PAGE_SIZE]; static char loc_buf[PAGE_SIZE];
static void free_pstree(void) static void free_pstree(struct list_head *pstree_list)
{ {
struct pstree_item *item, *p; struct pstree_item *item, *p;
list_for_each_entry_safe(item, p, &pstree_list, list) { list_for_each_entry_safe(item, p, pstree_list, list) {
xfree(item->children); xfree(item->children);
xfree(item); xfree(item);
} }
INIT_LIST_HEAD(&pstree_list); INIT_LIST_HEAD(pstree_list);
} }
static void free_mappings(void) static void free_mappings(void)
...@@ -789,7 +788,7 @@ err: ...@@ -789,7 +788,7 @@ err:
return item; return item;
} }
static int collect_pstree(pid_t pid) static int collect_pstree(pid_t pid, struct list_head *pstree_list)
{ {
struct pstree_item *item; struct pstree_item *item;
unsigned long i; unsigned long i;
...@@ -799,10 +798,10 @@ static int collect_pstree(pid_t pid) ...@@ -799,10 +798,10 @@ static int collect_pstree(pid_t pid)
if (!item) if (!item)
goto err; goto err;
list_add_tail(&item->list, &pstree_list); list_add_tail(&item->list, pstree_list);
for (i = 0; i < item->nr_children; i++) { for (i = 0; i < item->nr_children; i++) {
ret = collect_pstree(item->children[i]); ret = collect_pstree(item->children[i], pstree_list);
if (ret) if (ret)
goto err; goto err;
} }
...@@ -812,7 +811,7 @@ err: ...@@ -812,7 +811,7 @@ err:
return ret; return ret;
} }
static int dump_pstree(pid_t pid, struct cr_fdset *cr_fdset) static int dump_pstree(pid_t pid, struct list_head *pstree_list, struct cr_fdset *cr_fdset)
{ {
struct pstree_item *item; struct pstree_item *item;
struct pstree_entry e; struct pstree_entry e;
...@@ -823,7 +822,7 @@ static int dump_pstree(pid_t pid, struct cr_fdset *cr_fdset) ...@@ -823,7 +822,7 @@ static int dump_pstree(pid_t pid, struct cr_fdset *cr_fdset)
pr_info("Dumping pstree (pid: %d)\n", pid); pr_info("Dumping pstree (pid: %d)\n", pid);
pr_info("----------------------------------------\n"); pr_info("----------------------------------------\n");
list_for_each_entry(item, &pstree_list, list) { list_for_each_entry(item, pstree_list, list) {
pr_info("Process: %d (%d children)\n", pr_info("Process: %d (%d children)\n",
item->pid, item->nr_children); item->pid, item->nr_children);
...@@ -1056,6 +1055,7 @@ err: ...@@ -1056,6 +1055,7 @@ err:
int cr_dump_tasks(pid_t pid, struct cr_options *opts) int cr_dump_tasks(pid_t pid, struct cr_options *opts)
{ {
LIST_HEAD(pstree_list);
struct cr_fdset *cr_fdset = NULL; struct cr_fdset *cr_fdset = NULL;
struct pstree_item *item; struct pstree_item *item;
int ret = -1; int ret = -1;
...@@ -1067,7 +1067,7 @@ int cr_dump_tasks(pid_t pid, struct cr_options *opts) ...@@ -1067,7 +1067,7 @@ int cr_dump_tasks(pid_t pid, struct cr_options *opts)
pr_info("Dumping process (pid: %d)\n", pid); pr_info("Dumping process (pid: %d)\n", pid);
pr_info("========================================\n"); pr_info("========================================\n");
if (collect_pstree(pid)) if (collect_pstree(pid, &pstree_list))
goto err; goto err;
/* /*
...@@ -1091,7 +1091,7 @@ int cr_dump_tasks(pid_t pid, struct cr_options *opts) ...@@ -1091,7 +1091,7 @@ int cr_dump_tasks(pid_t pid, struct cr_options *opts)
if (item->pid == pid) { if (item->pid == pid) {
if (prep_cr_fdset_for_dump(cr_fdset, CR_FD_DESC_ALL)) if (prep_cr_fdset_for_dump(cr_fdset, CR_FD_DESC_ALL))
goto err; goto err;
if (dump_pstree(pid, cr_fdset)) if (dump_pstree(pid, &pstree_list, cr_fdset))
goto err; goto err;
} else { } else {
if (prep_cr_fdset_for_dump(cr_fdset, CR_FD_DESC_NOPSTREE)) if (prep_cr_fdset_for_dump(cr_fdset, CR_FD_DESC_NOPSTREE))
...@@ -1118,7 +1118,7 @@ err: ...@@ -1118,7 +1118,7 @@ err:
} }
} }
free_pstree(); free_pstree(&pstree_list);
close_cr_fdset(cr_fdset); close_cr_fdset(cr_fdset);
free_cr_fdset(&cr_fdset); free_cr_fdset(&cr_fdset);
return ret; return ret;
......
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