[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