Blob Blame History Raw
From 288c110fa1e35b0bf32f0e3480cf677e83a5bc23 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Thu, 8 Oct 2009 15:22:27 -0400
Subject: [PATCH 1/4] [main] Disconnect from tty when hiding splash

We were still processing keystrokes when the splash screen was
hidden. This caused problems because the tty is used by other
programs at that time.
---
 src/main.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/src/main.c b/src/main.c
index 31f2b1e..6f8c6bd 100644
--- a/src/main.c
+++ b/src/main.c
@@ -549,6 +549,8 @@ remove_displays_and_keyboard (state_t *state)
       node = next_node;
     }
 
+  ply_keyboard_stop_watching_for_input (state->keyboard);
+  ply_keyboard_free (state->keyboard);
   state->keyboard = NULL;
 }
 
-- 
1.6.5.rc2


From d8835ebfd35724dd12ec6e6a4c7b303996a37066 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Thu, 8 Oct 2009 15:33:40 -0400
Subject: [PATCH 2/4] [terminal] Only close terminal on free when open

We were closing the terminal twice, causing assertions
to blow.
---
 src/libplybootsplash/ply-terminal.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/src/libplybootsplash/ply-terminal.c b/src/libplybootsplash/ply-terminal.c
index 462a4c6..8147e86 100644
--- a/src/libplybootsplash/ply-terminal.c
+++ b/src/libplybootsplash/ply-terminal.c
@@ -499,7 +499,8 @@ ply_terminal_free (ply_terminal_t *terminal)
                                            ply_terminal_detach_from_event_loop,
                                            terminal);
 
-  ply_terminal_close (terminal);
+  if (terminal->is_open)
+    ply_terminal_close (terminal);
 
   free (terminal);
 }
-- 
1.6.5.rc2


From 78d610e82a9eebdce7ab43a6e3acfee1057f6a2c Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Thu, 8 Oct 2009 15:40:16 -0400
Subject: [PATCH 3/4] [main] remove displays before closing renderer

---
 src/main.c |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/main.c b/src/main.c
index 6f8c6bd..c309fab 100644
--- a/src/main.c
+++ b/src/main.c
@@ -604,6 +604,9 @@ quit_splash (state_t *state)
       state->boot_splash = NULL;
     }
 
+  ply_trace ("removing displays and keyboard");
+  remove_displays_and_keyboard (state);
+
   if (state->renderer != NULL)
     {
       ply_renderer_close (state->renderer);
@@ -618,9 +621,6 @@ quit_splash (state_t *state)
       state->terminal = NULL;
     }
 
-  ply_trace ("removing displays and keyboard");
-  remove_displays_and_keyboard (state);
-
   if (state->session != NULL)
     {
       ply_trace ("detaching session");
-- 
1.6.5.rc2


From e938daa05b05d5517cec61fab7caf0df75e5fa14 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Thu, 8 Oct 2009 15:41:06 -0400
Subject: [PATCH 4/4] [renderer] make input_source_close idempotent

---
 src/libplybootsplash/ply-renderer.c |   12 ++++++++++--
 1 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/libplybootsplash/ply-renderer.c b/src/libplybootsplash/ply-renderer.c
index f7f3c90..0966418 100644
--- a/src/libplybootsplash/ply-renderer.c
+++ b/src/libplybootsplash/ply-renderer.c
@@ -52,6 +52,8 @@ struct _ply_renderer
   char *device_name;
   ply_terminal_t *terminal;
   ply_console_t *console;
+
+  uint32_t input_source_is_open : 1;
 };
 
 typedef const ply_renderer_plugin_interface_t *
@@ -321,8 +323,10 @@ ply_renderer_open_input_source (ply_renderer_t              *renderer,
   assert (renderer != NULL);
   assert (input_source != NULL);
 
-  return renderer->plugin_interface->open_input_source (renderer->backend,
-                                                        input_source);
+  renderer->input_source_is_open = renderer->plugin_interface->open_input_source (renderer->backend,
+                                                                                  input_source);
+
+  return renderer->input_source_is_open;
 }
 
 void
@@ -347,8 +351,12 @@ ply_renderer_close_input_source (ply_renderer_t              *renderer,
   assert (renderer != NULL);
   assert (input_source != NULL);
 
+  if (!renderer->input_source_is_open)
+    return;
+
   renderer->plugin_interface->close_input_source (renderer->backend,
                                                   input_source);
+  renderer->input_source_is_open = false;
 }
 
 /* vim: set ts=4 sw=4 expandtab autoindent cindent cino={.5s,(0: */
-- 
1.6.5.rc2

From 30fa8e2d48ab6ea8909a997aa983c475753059b2 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Thu, 8 Oct 2009 15:42:27 -0400
Subject: [PATCH] [keyboard] make stop_watching_for_terminal_input idempotent

---
 src/libplybootsplash/ply-keyboard.c |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/src/libplybootsplash/ply-keyboard.c b/src/libplybootsplash/ply-keyboard.c
index 375ddd5..ab72823 100644
--- a/src/libplybootsplash/ply-keyboard.c
+++ b/src/libplybootsplash/ply-keyboard.c
@@ -357,6 +357,9 @@ ply_keyboard_watch_for_terminal_input (ply_keyboard_t *keyboard)
 static void
 ply_keyboard_stop_watching_for_terminal_input (ply_keyboard_t *keyboard)
 {
+  if (keyboard->provider.if_terminal->input_watch == NULL)
+    return;
+
   ply_event_loop_stop_watching_fd (keyboard->loop,
                                    keyboard->provider.if_terminal->input_watch);
   keyboard->provider.if_terminal->input_watch = NULL;
-- 
1.6.5.rc2

From adf98f119b5f06c238b86860f690fe2af608d57f Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Tue, 6 Oct 2009 16:47:41 -0400
Subject: [PATCH] [main] clean up terminal when done with it

Before we were relying on the renderer to clean
up the terminal, which was wrong.
---
 src/main.c |   12 ++++++++++++
 1 files changed, 12 insertions(+), 0 deletions(-)

diff --git a/src/main.c b/src/main.c
index e827da4..31f2b1e 100644
--- a/src/main.c
+++ b/src/main.c
@@ -94,6 +94,7 @@ typedef struct
   ply_command_parser_t *command_parser;
   ply_mode_t mode;
   ply_renderer_t *renderer;
+  ply_terminal_t *terminal;
 
   ply_trigger_t *quit_trigger;
 
@@ -608,6 +609,13 @@ quit_splash (state_t *state)
       state->renderer = NULL;
     }
 
+  if (state->terminal != NULL)
+    {
+      ply_terminal_close (state->terminal);
+      ply_terminal_free (state->terminal);
+      state->terminal = NULL;
+    }
+
   ply_trace ("removing displays and keyboard");
   remove_displays_and_keyboard (state);
 
@@ -935,6 +943,8 @@ add_display_and_keyboard_for_terminal (state_t    *state,
       return;
     }
 
+  state->terminal = terminal;
+
   ply_console_set_active_vt (state->console,
                              ply_terminal_get_vt_number (terminal));
 
@@ -1005,6 +1015,8 @@ add_default_displays_and_keyboard (state_t *state)
       return;
     }
 
+  state->terminal = terminal;
+
   keyboard = ply_keyboard_new_for_renderer (renderer);
   set_keyboard (state, keyboard);
 
-- 
1.6.5.rc2