summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Ancell <robert.ancell@canonical.com>2013-04-23 14:23:44 +1200
committerRobert Ancell <robert.ancell@canonical.com>2013-04-23 14:23:44 +1200
commit9377ed61e986022ef60519335e868a3ff9beb899 (patch)
tree8b8e8c7e118c7e19d6054f3b6853f6af4f3fe627
parent1db15ff64aa0997423d83340b7664838fa985644 (diff)
downloadlightdm-git-9377ed61e986022ef60519335e868a3ff9beb899.tar.gz
Fix bug where seat failure before D-Bus acquired would not stop daemon
-rw-r--r--src/lightdm.c22
1 files changed, 12 insertions, 10 deletions
diff --git a/src/lightdm.c b/src/lightdm.c
index 465b44a7..de795df7 100644
--- a/src/lightdm.c
+++ b/src/lightdm.c
@@ -146,6 +146,17 @@ display_manager_stopped_cb (DisplayManager *display_manager)
g_main_loop_quit (loop);
}
+static void
+display_manager_seat_removed_cb (DisplayManager *display_manager, Seat *seat)
+{
+ if (seat_get_boolean_property (seat, "exit-on-failure"))
+ {
+ g_debug ("Required seat has stopped");
+ exit_code = EXIT_FAILURE;
+ display_manager_stop (display_manager);
+ }
+}
+
static GVariant *
handle_display_manager_get_property (GDBusConnection *connection,
const gchar *sender,
@@ -623,17 +634,7 @@ seat_added_cb (DisplayManager *display_manager, Seat *seat)
static void
seat_removed_cb (DisplayManager *display_manager, Seat *seat)
{
- gboolean exit_on_failure;
-
- exit_on_failure = seat_get_boolean_property (seat, "exit-on-failure");
g_hash_table_remove (seat_bus_entries, seat);
-
- if (exit_on_failure)
- {
- g_debug ("Required seat has stopped");
- exit_code = EXIT_FAILURE;
- display_manager_stop (display_manager);
- }
}
static void
@@ -1069,6 +1070,7 @@ main (int argc, char **argv)
display_manager = display_manager_new ();
g_signal_connect (display_manager, "stopped", G_CALLBACK (display_manager_stopped_cb), NULL);
+ g_signal_connect (display_manager, "seat-removed", G_CALLBACK (display_manager_seat_removed_cb), NULL);
/* Load the static display entries */
groups = config_get_groups (config_get_instance ());