mirror of
https://github.com/checkpoint-restore/criu
synced 2025-09-04 00:05:26 +00:00
pstree: Implement free_pstree_item() helper
Helper to free pstree_item and its components. Also, use it in collect_children() to free dynamically allocated components. v4: New Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com> Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
This commit is contained in:
committed by
Andrei Vagin
parent
79c3e2618e
commit
0904d50e67
@@ -85,6 +85,7 @@ static inline bool task_alive(struct pstree_item *i)
|
|||||||
return is_alive_state(i->pid->state);
|
return is_alive_state(i->pid->state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern void free_pstree_item(struct pstree_item *item);
|
||||||
extern void free_pstree(struct pstree_item *root_item);
|
extern void free_pstree(struct pstree_item *root_item);
|
||||||
extern struct pstree_item *__alloc_pstree_item(bool rst, int level);
|
extern struct pstree_item *__alloc_pstree_item(bool rst, int level);
|
||||||
#define alloc_pstree_item() __alloc_pstree_item(false, 1)
|
#define alloc_pstree_item() __alloc_pstree_item(false, 1)
|
||||||
|
@@ -176,6 +176,16 @@ void pstree_free_cores(struct pstree_item *item)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void free_pstree_item(struct pstree_item *item)
|
||||||
|
{
|
||||||
|
pstree_free_cores(item);
|
||||||
|
xfree(item->threads);
|
||||||
|
xfree(item->pid);
|
||||||
|
xfree(item->pgid);
|
||||||
|
xfree(item->sid);
|
||||||
|
xfree(item);
|
||||||
|
}
|
||||||
|
|
||||||
void free_pstree(struct pstree_item *root_item)
|
void free_pstree(struct pstree_item *root_item)
|
||||||
{
|
{
|
||||||
struct pstree_item *item = root_item, *parent;
|
struct pstree_item *item = root_item, *parent;
|
||||||
@@ -188,10 +198,7 @@ void free_pstree(struct pstree_item *root_item)
|
|||||||
|
|
||||||
parent = item->parent;
|
parent = item->parent;
|
||||||
list_del(&item->sibling);
|
list_del(&item->sibling);
|
||||||
pstree_free_cores(item);
|
free_pstree_item(item);
|
||||||
xfree(item->threads);
|
|
||||||
xfree(item->pid);
|
|
||||||
xfree(item);
|
|
||||||
item = parent;
|
item = parent;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -211,10 +218,7 @@ struct pstree_item *__alloc_pstree_item(bool rst, int level)
|
|||||||
item->pgid = xmalloc(p_sz);
|
item->pgid = xmalloc(p_sz);
|
||||||
item->sid = xmalloc(p_sz);
|
item->sid = xmalloc(p_sz);
|
||||||
if (!item->pid || !item->pgid || !item->sid) {
|
if (!item->pid || !item->pgid || !item->sid) {
|
||||||
xfree(item->pid);
|
free_pstree_item(item);
|
||||||
xfree(item->pgid);
|
|
||||||
xfree(item->sid);
|
|
||||||
xfree(item);
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@@ -500,7 +500,7 @@ static int collect_children(struct pstree_item *item)
|
|||||||
* really wrong.
|
* really wrong.
|
||||||
*/
|
*/
|
||||||
ret = 0;
|
ret = 0;
|
||||||
xfree(c);
|
free_pstree_item(c);
|
||||||
xfree(creds);
|
xfree(creds);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user