summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRay Strode <rstrode@redhat.com>2012-11-02 17:26:41 -0400
committerRay Strode <rstrode@redhat.com>2012-11-02 17:26:41 -0400
commita6129abfc527ac247685d80fc5c20144be1badca (patch)
treed42b2f1626e9f73ecec03fe111d83a08d74e25b0
parentb3548ebaf76d222f56d6a7b34c5940b930d47609 (diff)
main: make plymouth show-splash idempotent
plymouth show-splash causes hairy things, that should only happen once, like activating renderers to happen. This commit makes subsequent show-splash calls be no-ops.
-rw-r--r--src/main.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/main.c b/src/main.c
index 60ca28f5..ff061630 100644
--- a/src/main.c
+++ b/src/main.c
@@ -113,6 +113,7 @@ typedef struct
uint32_t should_be_attached : 1;
uint32_t should_retain_splash : 1;
uint32_t is_inactive : 1;
+ uint32_t is_shown : 1;
uint32_t should_force_details : 1;
char *kernel_console_tty;
@@ -871,6 +872,12 @@ on_show_splash (state_t *state)
{
bool has_display;
+ if (state->is_shown)
+ {
+ ply_trace ("show splash called while already shown");
+ return;
+ }
+
if (state->is_inactive)
{
ply_trace ("show splash called while inactive");
@@ -884,6 +891,8 @@ on_show_splash (state_t *state)
return;
}
+ state->is_shown = true;
+
check_for_consoles (state, state->default_tty, true);
has_display = ply_list_get_length (state->pixel_displays) > 0 ||
@@ -1012,6 +1021,8 @@ dump_details_and_quit_splash (state_t *state)
if (state->boot_splash != NULL)
ply_boot_splash_hide (state->boot_splash);
+ state->is_shown = false;
+
quit_splash (state);
}
@@ -1116,6 +1127,8 @@ on_boot_splash_idle (state_t *state)
ply_renderer_deactivate (state->renderer);
if (state->boot_splash != NULL)
ply_boot_splash_hide (state->boot_splash);
+
+ state->is_shown = false;
}
ply_trace ("quitting splash");