[CRIU] Re: [PATCH 4/6] tty: No need to test unpaired slaves if --ext-tty passed

Andrew Vagin avagin at parallels.com
Wed Sep 26 09:32:06 EDT 2012


On Wed, Sep 26, 2012 at 05:05:45PM +0400, Cyrill Gorcunov wrote:
> In case if --ext-tty passed we're informed that we should
> restore any external slave tty we've met.
> 
> The external tty is rather a slave peer connected to some
> master peer which doesn't belong any process in our dumpee
> process tree.
> 
> A typical example -- top session inside bash. The user
> might dump only top itself without parent bash process.
> 
> Actually this is not encouraged, because if such top
> process restore from another bash session -- we simply
> can't restore session back loosing controlling terminal
> settings.
> 
> Signed-off-by: Cyrill Gorcunov <gorcunov at openvz.org>
> ---
>  cr-dump.c     |    2 +-
>  include/tty.h |    3 ++-
>  tty.c         |    9 ++++++++-
>  3 files changed, 11 insertions(+), 3 deletions(-)
> 
> diff --git a/cr-dump.c b/cr-dump.c
> index 0541e5c..22402f2 100644
> --- a/cr-dump.c
> +++ b/cr-dump.c
> @@ -1630,7 +1630,7 @@ int cr_dump_tasks(pid_t pid, const struct cr_options *opts)
>  	if (ret)
>  		goto err;
>  
> -	ret = tty_verify_active_pairs();
> +	ret = tty_verify_active_pairs(opts);
>  	if (ret)
>  		goto err;
>  
> diff --git a/include/tty.h b/include/tty.h
> index eccc3f2..982bffb 100644
> --- a/include/tty.h
> +++ b/include/tty.h
> @@ -18,6 +18,7 @@ extern int collect_tty(void);
>  extern int prepare_shared_tty(void);
>  extern void tty_setup_slavery(void);
>  
> -extern int tty_verify_active_pairs(void);
> +struct cr_options;
> +extern int tty_verify_active_pairs(const struct cr_options *opts);
>  
>  #endif /* CR_TTY_H__ */
> diff --git a/tty.c b/tty.c
> index ee63273..1ee1b9b 100644
> --- a/tty.c
> +++ b/tty.c
> @@ -144,10 +144,17 @@ static int tty_get_index(u32 id)
>  }
>  
>  /* Make sure the active pairs do exist */
> -int tty_verify_active_pairs(void)
> +int tty_verify_active_pairs(const struct cr_options *opts)
>  {
>  	unsigned long i;
>  
> +	/*
> +	 * If we're allowed to connect to external
> +	 * master peers -- we can deal with any data.
> +	 */
> +	if (opts->ext_tty)
> +		return 0;

Only one terminal can be external. In other cases crtools dump should
fail, isn't it?
> +
>  	for (i = 0; i < sizeof(tty_active_pairs); i++) {
>  		i = find_next_bit(tty_active_pairs,
>  				  sizeof(tty_active_pairs), i);
> -- 
> 1.7.7.6
> 


More information about the CRIU mailing list