summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRay Strode <rstrode@redhat.com>2010-09-26 18:17:47 -0400
committerRay Strode <rstrode@redhat.com>2010-09-26 18:17:47 -0400
commit5b4ed8f35a1e9358d94df4b84ad49cea790f57e9 (patch)
tree723f57b94aad7174a9c7880da0b97124ef4378d7
parent1caaa93837772146bed243ed21559f0f781b6ff3 (diff)
terminal-session: try to continue logging after tty disconnect
Currently, we give up on boot logging after a tty disconnect. This commit makes the terminal session reattach to the tty, and continue logging.
-rw-r--r--src/libply/ply-terminal-session.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/libply/ply-terminal-session.c b/src/libply/ply-terminal-session.c
index c5f37e14..3f98873c 100644
--- a/src/libply/ply-terminal-session.c
+++ b/src/libply/ply-terminal-session.c
@@ -48,6 +48,7 @@ struct _ply_terminal_session
ply_event_loop_t *loop;
char **argv;
ply_fd_watch_t *fd_watch;
+ ply_terminal_session_flags_t attach_flags;
ply_terminal_session_output_handler_t output_handler;
ply_terminal_session_hangup_handler_t hangup_handler;
@@ -390,6 +391,7 @@ ply_terminal_session_attach (ply_terminal_session_t *session,
session->output_handler = output_handler;
session->hangup_handler = hangup_handler;
session->user_data = user_data;
+ session->attach_flags = flags;
ply_terminal_session_start_logging (session);
return true;
@@ -470,11 +472,19 @@ ply_terminal_session_on_new_data (ply_terminal_session_t *session,
static void
ply_terminal_session_on_hangup (ply_terminal_session_t *session)
{
- ply_terminal_session_hangup_handler_t hangup_handler;
+ ply_terminal_session_hangup_handler_t hangup_handler;
+ ply_terminal_session_output_handler_t output_handler;
+ void *user_data;
+ ply_terminal_session_flags_t attach_flags;
+ bool created_terminal_device;
assert (session != NULL);
hangup_handler = session->hangup_handler;
+ output_handler = session->output_handler;
+ user_data = session->user_data;
+ attach_flags = session->attach_flags;
+ created_terminal_device = session->created_terminal_device;
ply_logger_flush (session->logger);
@@ -486,6 +496,15 @@ ply_terminal_session_on_hangup (ply_terminal_session_t *session)
hangup_handler (session->user_data, session);
ply_terminal_session_detach (session);
+
+ /* session ripped away, try to take it back
+ */
+ if (created_terminal_device)
+ {
+ ply_terminal_session_attach (session, attach_flags,
+ output_handler, hangup_handler,
+ -1, user_data);
+ }
}
static void