[CRIU] Re: [PATCH 3/5] tty: Add tty_prep_fds, tty_fini_fds helpers
Andrew Vagin
avagin at parallels.com
Fri Sep 28 09:35:15 EDT 2012
On Thu, Sep 27, 2012 at 04:17:40PM +0400, Cyrill Gorcunov wrote:
> They will serve for one purpose -- to clone
> self stdio descriptor and use it with tty
> migration if needed.
>
> Signed-off-by: Cyrill Gorcunov <gorcunov at openvz.org>
> ---
> include/tty.h | 3 +++
> tty.c | 32 ++++++++++++++++++++++++++++++++
> 2 files changed, 35 insertions(+), 0 deletions(-)
>
> diff --git a/include/tty.h b/include/tty.h
> index eccc3f2..cb860b1 100644
> --- a/include/tty.h
> +++ b/include/tty.h
> @@ -20,4 +20,7 @@ extern void tty_setup_slavery(void);
>
> extern int tty_verify_active_pairs(void);
>
> +extern int tty_prep_fds(void);
> +extern void tty_fini_fds(void);
> +
> #endif /* CR_TTY_H__ */
> diff --git a/tty.c b/tty.c
> index ee63273..acb89bc 100644
> --- a/tty.c
> +++ b/tty.c
> @@ -80,6 +80,7 @@ struct tty_info {
>
> static LIST_HEAD(all_tty_info_entries);
> static LIST_HEAD(all_ttys);
> +static int self_stdin = -1;
>
> /*
> * Usually an application has not that many ttys opened.
> @@ -1055,3 +1056,34 @@ int dump_tty(struct fd_parms *p, int lfd, const struct cr_fdset *set)
> {
> return do_dump_gen_file(p, lfd, &tty_ops, set);
> }
> +
> +/*
> + * FIXME
> + *
> + * Strictly speaking we don't need to prepare self stdin clone
> + * for each process, but the concept is that only one migrating tty
> + * is allowed so this helpers should be called once only in context
> + * of a process which owns migrating tty fd.
You can call it from crtools_prepare_shared
> + */
> +int tty_prep_fds(void)
> +{
> + self_stdin = get_service_fd(SELF_STDIN_OFF);
> +
> + if (!isatty(fileno(stdin))) {
> + pr_err("Standart stream is not a terminal, aborting\n");
> + return -1;
> + }
> +
> + if (dup2(fileno(stdin), self_stdin) < 0) {
fileno(stdin) = STDIN_FILENO
> + self_stdin = -1;
> + pr_perror("Can't dup stdin to SELF_STDIN_OFF");
> + return -1;
> + }
> +
> + return 0;
> +}
> +
> +void tty_fini_fds(void)
> +{
> + close_safe(&self_stdin);
> +}
> --
> 1.7.7.6
>
More information about the CRIU
mailing list