From 288c110fa1e35b0bf32f0e3480cf677e83a5bc23 Mon Sep 17 00:00:00 2001 From: Ray Strode 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 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 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 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 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