[CRIU] [PATCH 2/3] tty: No need to test unpaired slaves if --ext-tty passed

Cyrill Gorcunov gorcunov at openvz.org
Thu Sep 20 07:00:32 EDT 2012


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,
but still output from `top' will be seen in new `bash'.

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;
+
 	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