[CRIU] [PATCH 1/3] seize: detach from all processes before waiting the root task
Andrew Vagin
avagin at virtuozzo.com
Tue Jan 19 14:03:16 PST 2016
On Mon, Jan 18, 2016 at 09:13:40PM +0300, Pavel Emelyanov wrote:
> On 01/16/2016 05:57 AM, Andrey Vagin wrote:
> > From: Andrew Vagin <avagin at virtuozzo.com>
> >
> > We need to detach from all processes before waiting the root
> > task, because one of these processes may collect processes from a
> > target pid namespace. The pid namespace is destroyed only when all
> > processes have been killed and collected.
>
> This effectively reverts commit 4a393715. What do we do about the
> original bug fixed by that one?
It fixed by the "seize: don't detach from a task if a freezer cgroup is
set"
>
> > https://jira.sw.ru/browse/PSBM-43089
> > Signed-off-by: Andrew Vagin <avagin at virtuozzo.com>
> > ---
> > seize.c | 10 ++++++++--
> > 1 file changed, 8 insertions(+), 2 deletions(-)
> >
> > diff --git a/seize.c b/seize.c
> > index 7e93d34..18f0d40 100644
> > --- a/seize.c
> > +++ b/seize.c
> > @@ -452,10 +452,16 @@ void pstree_switch_state(struct pstree_item *root_item, int st)
> > for_each_pstree_item(item)
> > unseize_task_and_threads(item, st);
> >
> > + /*
> > + * We need to detach from all processes before waiting the init
> > + * process, because one of these processes may collect processes from a
> > + * target pid namespace. The pid namespace is destroyed only when all
> > + * processes have been killed and collected.
> > + */
> > + freezer_detach();
> > +
> > if (st == TASK_DEAD)
> > pstree_wait(root_item);
> > -
> > - freezer_detach();
> > }
> >
> > static pid_t item_ppid(const struct pstree_item *item)
> >
>
More information about the CRIU
mailing list