forked from rpms/plymouth
88 lines
2.7 KiB
Diff
88 lines
2.7 KiB
Diff
|
diff -up plymouth-0.6.0/src/libplybootsplash/ply-window.c.more-debug plymouth-0.6.0/src/libplybootsplash/ply-window.c
|
||
|
--- plymouth-0.6.0/src/libplybootsplash/ply-window.c.more-debug 2008-11-07 12:08:25.000000000 -0500
|
||
|
+++ plymouth-0.6.0/src/libplybootsplash/ply-window.c 2008-11-07 12:10:04.000000000 -0500
|
||
|
@@ -493,7 +493,10 @@ ply_window_open (ply_window_t *window)
|
||
|
window->vt_number = get_active_vt ();
|
||
|
|
||
|
if (readlink ("/proc/self/fd/0", tty_name, sizeof (tty_name) - 1) < 0)
|
||
|
- return false;
|
||
|
+ {
|
||
|
+ ply_trace ("could not read tty name of fd 0");
|
||
|
+ return false;
|
||
|
+ }
|
||
|
|
||
|
window->tty_name = strdup (tty_name);
|
||
|
}
|
||
|
@@ -503,7 +506,10 @@ ply_window_open (ply_window_t *window)
|
||
|
window->tty_fd = open (window->tty_name, O_RDWR | O_NOCTTY);
|
||
|
|
||
|
if (window->tty_fd < 0)
|
||
|
- return false;
|
||
|
+ {
|
||
|
+ ply_trace ("could not open %s : %m", window->tty_name);
|
||
|
+ return false;
|
||
|
+ }
|
||
|
|
||
|
if (!ply_window_set_unbuffered_input (window))
|
||
|
ply_trace ("window '%s' will be line buffered", window->tty_name);
|
||
|
diff -up plymouth-0.6.0/src/main.c.more-debug plymouth-0.6.0/src/main.c
|
||
|
--- plymouth-0.6.0/src/main.c.more-debug 2008-11-07 12:01:46.000000000 -0500
|
||
|
+++ plymouth-0.6.0/src/main.c 2008-11-07 12:08:16.000000000 -0500
|
||
|
@@ -220,6 +220,8 @@ has_open_window (state_t *state)
|
||
|
{
|
||
|
ply_list_node_t *node;
|
||
|
|
||
|
+ ply_trace ("checking for open windows");
|
||
|
+
|
||
|
node = ply_list_get_first_node (state->windows);
|
||
|
while (node != NULL)
|
||
|
{
|
||
|
@@ -231,7 +233,22 @@ has_open_window (state_t *state)
|
||
|
window = ply_list_node_get_data (node);
|
||
|
|
||
|
if (ply_window_is_open (window))
|
||
|
- return true;
|
||
|
+ {
|
||
|
+ int fd;
|
||
|
+ const char *name;
|
||
|
+
|
||
|
+ fd = ply_window_get_tty_fd (window);
|
||
|
+
|
||
|
+ if (fd >= 0)
|
||
|
+ name = ttyname (fd);
|
||
|
+ else
|
||
|
+ name = NULL;
|
||
|
+
|
||
|
+ ply_trace ("window %s%sis open",
|
||
|
+ name != NULL? name : "",
|
||
|
+ name != NULL? " " : "");
|
||
|
+ return true;
|
||
|
+ }
|
||
|
|
||
|
node = next_node;
|
||
|
}
|
||
|
@@ -324,11 +341,22 @@ close_windows (state_t *state)
|
||
|
static void
|
||
|
on_show_splash (state_t *state)
|
||
|
{
|
||
|
+ bool has_open_window;
|
||
|
+
|
||
|
open_windows (state);
|
||
|
|
||
|
- if (!state->is_redirected && state->ptmx >= 0)
|
||
|
+ has_open_window = has_open_window (state);
|
||
|
+
|
||
|
+ if (!state->is_redirected && state->ptmx >= 0 && has_open_window)
|
||
|
state->is_redirected = attach_to_running_session (state);
|
||
|
|
||
|
+ if (!has_open_window && state->is_redirected)
|
||
|
+ {
|
||
|
+ ply_trace ("no open windows, detaching session");
|
||
|
+ ply_terminal_session_detach (state->session);
|
||
|
+ state->is_redirected = false;
|
||
|
+ }
|
||
|
+
|
||
|
if (plymouth_should_show_default_splash (state))
|
||
|
show_default_splash (state);
|
||
|
else
|