mirror of
https://github.com/checkpoint-restore/criu.git
synced 2026-07-17 16:47:50 +00:00
restore: create fake process group leaders
Just like for orphaned sessions, create a fake task for orphaned pgids. Signed-off-by: Andrey Vagin <avagin@openvz.org> Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
This commit is contained in:
parent
6fb3759c5f
commit
d249c293f7
1 changed files with 30 additions and 0 deletions
30
pstree.c
30
pstree.c
|
|
@ -308,6 +308,36 @@ int prepare_pstree_ids(void)
|
|||
/* All other helpers are session leaders for own sessions */
|
||||
list_splice(&helpers, &root_item->children);
|
||||
|
||||
/* Add a process group leader if it is absent */
|
||||
for_each_pstree_item(item) {
|
||||
struct pstree_item *gleader;
|
||||
|
||||
if (!item->pgid || item->pid.virt == item->pgid)
|
||||
continue;
|
||||
|
||||
for_each_pstree_item(gleader) {
|
||||
if (gleader->pid.virt == item->pgid)
|
||||
break;
|
||||
}
|
||||
|
||||
if (gleader)
|
||||
continue;
|
||||
|
||||
helper = alloc_pstree_item();
|
||||
if (helper == NULL)
|
||||
return -1;
|
||||
helper->sid = item->sid;
|
||||
helper->pgid = item->pgid;
|
||||
helper->pid.virt = item->pgid;
|
||||
helper->state = TASK_HELPER;
|
||||
helper->parent = item;
|
||||
list_add(&helper->list, &item->children);
|
||||
task_entries->nr_helpers++;
|
||||
|
||||
pr_info("Add a helper %d for restoring PGID %d\n",
|
||||
helper->pid.virt, helper->pgid);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue