diff options
32 files changed, 305 insertions, 216 deletions
diff --git a/common/configuration.c b/common/configuration.c index 895085e3..dc7831a8 100644 --- a/common/configuration.c +++ b/common/configuration.c @@ -331,9 +331,7 @@ config_init (Configuration *config) static void config_finalize (GObject *object) { - Configuration *self; - - self = CONFIGURATION (object); + Configuration *self = CONFIGURATION (object); g_free (self->priv->dir); g_key_file_free (self->priv->key_file); diff --git a/common/user-list.c b/common/user-list.c index 792c6d3a..1b198d1a 100644 --- a/common/user-list.c +++ b/common/user-list.c @@ -186,9 +186,7 @@ common_user_list_get_instance (void) void common_user_list_cleanup (void) { - if (singleton) - g_object_unref (singleton); - singleton = NULL; + g_clear_object (&singleton); } static CommonUser * @@ -1059,8 +1057,7 @@ common_user_list_finalize (GObject *object) if (priv->session_removed_signal) g_dbus_connection_signal_unsubscribe (priv->bus, priv->session_removed_signal); g_object_unref (priv->bus); - if (priv->passwd_monitor) - g_object_unref (priv->passwd_monitor); + g_clear_object (&priv->passwd_monitor); G_OBJECT_CLASS (common_user_list_parent_class)->finalize (object); } diff --git a/liblightdm-gobject/greeter.c b/liblightdm-gobject/greeter.c index bcddf154..e507b654 100644 --- a/liblightdm-gobject/greeter.c +++ b/liblightdm-gobject/greeter.c @@ -1952,8 +1952,7 @@ request_finalize (GObject *object) Request *request = REQUEST (object); g_free (request->dir); - if (request->cancellable) - g_object_unref (request->cancellable); + g_clear_object (&request->cancellable); G_OBJECT_CLASS (request_parent_class)->finalize (object); } diff --git a/src/accounts.c b/src/accounts.c index d4d54a2e..77cfdf5e 100644 --- a/src/accounts.c +++ b/src/accounts.c @@ -122,17 +122,13 @@ user_init (User *user) } static void -user_dispose (GObject *object) +user_finalize (GObject *object) { - User *self; + User *self = USER (object); - self = USER (object); + g_clear_object (&self->priv->common_user); - if (self->priv->common_user) - g_object_unref (self->priv->common_user); - self->priv->common_user = NULL; - - G_OBJECT_CLASS (user_parent_class)->dispose (object); + G_OBJECT_CLASS (user_parent_class)->finalize (object); } static void @@ -140,7 +136,7 @@ user_class_init (UserClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); - object_class->dispose = user_dispose; + object_class->finalize = user_finalize; g_type_class_add_private (klass, sizeof (UserPrivate)); } diff --git a/src/display-manager.c b/src/display-manager.c index b683fdaa..af9f43a4 100644 --- a/src/display-manager.c +++ b/src/display-manager.c @@ -170,11 +170,9 @@ display_manager_init (DisplayManager *manager) static void display_manager_finalize (GObject *object) { - DisplayManager *self; + DisplayManager *self = DISPLAY_MANAGER (object); GList *link; - self = DISPLAY_MANAGER (object); - for (link = self->priv->seats; link; link = link->next) { Seat *seat = link->data; diff --git a/src/display-server.c b/src/display-server.c index 336a6eed..7821b6ab 100644 --- a/src/display-server.c +++ b/src/display-server.c @@ -154,9 +154,7 @@ display_server_init (DisplayServer *server) static void display_server_finalize (GObject *object) { - DisplayServer *self; - - self = DISPLAY_SERVER (object); + DisplayServer *self = DISPLAY_SERVER (object); g_free (self->priv->name); diff --git a/src/greeter.c b/src/greeter.c index b9f4f55a..db52a43d 100644 --- a/src/greeter.c +++ b/src/greeter.c @@ -412,8 +412,7 @@ reset_session (Greeter *greeter) { g_signal_handlers_disconnect_matched (greeter->priv->authentication_session, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, greeter); session_stop (greeter->priv->authentication_session); - g_object_unref (greeter->priv->authentication_session); - greeter->priv->authentication_session = NULL; + g_clear_object (&greeter->priv->authentication_session); } greeter->priv->guest_account_authenticated = FALSE; @@ -1043,9 +1042,7 @@ greeter_init (Greeter *greeter) static void greeter_finalize (GObject *object) { - Greeter *self; - - self = GREETER (object); + Greeter *self = GREETER (object); g_free (self->priv->pam_service); g_free (self->priv->autologin_pam_service); diff --git a/src/lightdm.c b/src/lightdm.c index 72f7eb0c..d9ec9aff 100644 --- a/src/lightdm.c +++ b/src/lightdm.c @@ -1539,8 +1539,7 @@ main (int argc, char **argv) common_user_list_cleanup (); /* Clean up display manager */ - g_object_unref (display_manager); - display_manager = NULL; + g_clear_object (&display_manager); /* Remove D-Bus interface */ g_dbus_connection_unregister_object (bus, reg_id); diff --git a/src/login1.c b/src/login1.c index af8e8a8e..dc60a492 100644 --- a/src/login1.c +++ b/src/login1.c @@ -450,7 +450,7 @@ login1_service_finalize (GObject *object) g_list_free_full (self->priv->seats, g_object_unref); g_dbus_connection_signal_unsubscribe (self->priv->connection, self->priv->signal_id); - g_object_unref (self->priv->connection); + g_clear_object (&self->priv->connection); G_OBJECT_CLASS (login1_service_parent_class)->finalize (object); } diff --git a/src/mir-server.c b/src/mir-server.c index 36e0e770..303f3d56 100644 --- a/src/mir-server.c +++ b/src/mir-server.c @@ -99,13 +99,11 @@ mir_server_init (MirServer *server) static void mir_server_finalize (GObject *object) { - MirServer *server; - - server = MIR_SERVER (object); + MirServer *self = MIR_SERVER (object); - if (server->priv->vt > 0) - vt_unref (server->priv->vt); - g_free (server->priv->parent_socket); + if (self->priv->vt > 0) + vt_unref (self->priv->vt); + g_free (self->priv->parent_socket); G_OBJECT_CLASS (mir_server_parent_class)->finalize (object); } diff --git a/src/process.c b/src/process.c index 50c0a9b0..ebd12743 100644 --- a/src/process.c +++ b/src/process.c @@ -359,9 +359,7 @@ process_stopped (Process *process) static void process_finalize (GObject *object) { - Process *self; - - self = PROCESS (object); + Process *self = PROCESS (object); if (self->priv->pid > 0) g_hash_table_remove (processes, GINT_TO_POINTER (self->priv->pid)); diff --git a/src/seat-unity.c b/src/seat-unity.c index 642be0aa..409c0a46 100644 --- a/src/seat-unity.c +++ b/src/seat-unity.c @@ -140,8 +140,7 @@ compositor_stopped_cb (UnitySystemCompositor *compositor, SeatUnity *seat) { l_debug (seat, "Compositor stopped"); - g_object_unref (seat->priv->compositor); - seat->priv->compositor = NULL; + g_clear_object (&seat->priv->compositor); if (seat_get_is_stopping (SEAT (seat))) check_stopped (seat); @@ -421,17 +420,14 @@ seat_unity_finalize (GObject *object) { SeatUnity *seat = SEAT_UNITY (object); - if (seat->priv->compositor) - g_object_unref (seat->priv->compositor); + g_clear_object (&seat->priv->compositor); if (seat->priv->xdmcp_x_server) { g_signal_handlers_disconnect_matched (seat->priv->xdmcp_x_server, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, seat); g_object_unref (seat->priv->xdmcp_x_server); } - if (seat->priv->active_session) - g_object_unref (seat->priv->active_session); - if (seat->priv->active_display_server) - g_object_unref (seat->priv->active_display_server); + g_clear_object (&seat->priv->active_session); + g_clear_object (&seat->priv->active_display_server); G_OBJECT_CLASS (seat_unity_parent_class)->finalize (object); } diff --git a/src/seat-xdmcp-session.c b/src/seat-xdmcp-session.c index 7621a97b..41998279 100644 --- a/src/seat-xdmcp-session.c +++ b/src/seat-xdmcp-session.c @@ -60,11 +60,9 @@ seat_xdmcp_session_init (SeatXDMCPSession *seat) static void seat_xdmcp_session_finalize (GObject *object) { - SeatXDMCPSession *self; + SeatXDMCPSession *self = SEAT_XDMCP_SESSION (object); - self = SEAT_XDMCP_SESSION (object); - - g_object_unref (self->priv->session); + g_clear_object (&self->priv->session); G_OBJECT_CLASS (seat_xdmcp_session_parent_class)->finalize (object); } diff --git a/src/seat-xvnc.c b/src/seat-xvnc.c index 00f5f693..93e0e13f 100644 --- a/src/seat-xvnc.c +++ b/src/seat-xvnc.c @@ -101,11 +101,9 @@ seat_xvnc_init (SeatXVNC *seat) static void seat_xdmcp_session_finalize (GObject *object) { - SeatXVNC *self; + SeatXVNC *self = SEAT_XVNC (object); - self = SEAT_XVNC (object); - - g_object_unref (self->priv->connection); + g_clear_object (&self->priv->connection); G_OBJECT_CLASS (seat_xvnc_parent_class)->finalize (object); } @@ -65,6 +65,9 @@ struct SeatPrivate /* TRUE if stopped */ gboolean stopped; + + /* The greeter to be started to replace the current one */ + Greeter *replacement_greeter; }; static void seat_logger_iface_init (LoggerInterface *iface); @@ -244,14 +247,11 @@ seat_set_active_session (Seat *seat, Session *session) } /* Lock previous sessions */ - if (seat->priv->active_session) - { - if (session != seat->priv->active_session && !IS_GREETER (seat->priv->active_session)) - session_lock (seat->priv->active_session); - g_object_unref (seat->priv->active_session); - } + if (seat->priv->active_session && session != seat->priv->active_session && !IS_GREETER (seat->priv->active_session)) + session_lock (seat->priv->active_session); session_activate (session); + g_clear_object (&seat->priv->active_session); seat->priv->active_session = g_object_ref (session); } @@ -297,8 +297,7 @@ void seat_set_externally_activated_session (Seat *seat, Session *session) { g_return_if_fail (seat != NULL); - if (seat->priv->active_session) - g_object_unref (seat->priv->active_session); + g_clear_object (&seat->priv->active_session); seat->priv->active_session = g_object_ref (session); } @@ -565,8 +564,7 @@ switch_to_greeter_from_failed_session (Seat *seat, Session *session) } else { - if (seat->priv->session_to_activate) - g_object_unref (seat->priv->session_to_activate); + g_clear_object (&seat->priv->session_to_activate); seat->priv->session_to_activate = g_object_ref (greeter_session); if (can_share_display_server (seat, session_get_display_server (session))) @@ -651,8 +649,7 @@ run_session (Seat *seat, Session *session) if (session == seat->priv->session_to_activate) { seat_set_active_session (seat, session); - g_object_unref (seat->priv->session_to_activate); - seat->priv->session_to_activate = NULL; + g_clear_object (&seat->priv->session_to_activate); } else if (seat->priv->active_session) { @@ -696,8 +693,7 @@ greeter_active_username_changed_cb (Greeter *greeter, GParamSpec *pspec, Seat *s session = find_user_session (seat, greeter_get_active_username (greeter), seat->priv->active_session); - if (seat->priv->next_session) - g_object_unref (seat->priv->next_session); + g_clear_object (&seat->priv->next_session); seat->priv->next_session = session ? g_object_ref (session) : NULL; SEAT_GET_CLASS (seat)->set_next_session (seat, session); @@ -745,20 +741,11 @@ session_stopped_cb (Session *session, Seat *seat) g_signal_handlers_disconnect_matched (session, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, seat); seat->priv->sessions = g_list_remove (seat->priv->sessions, session); if (session == seat->priv->active_session) - { - g_object_unref (seat->priv->active_session); - seat->priv->active_session = NULL; - } + g_clear_object (&seat->priv->active_session); if (session == seat->priv->next_session) - { - g_object_unref (seat->priv->next_session); - seat->priv->next_session = NULL; - } + g_clear_object (&seat->priv->next_session); if (session == seat->priv->session_to_activate) - { - g_object_unref (seat->priv->session_to_activate); - seat->priv->session_to_activate = NULL; - } + g_clear_object (&seat->priv->session_to_activate); display_server = session_get_display_server (session); if (!display_server) @@ -779,10 +766,7 @@ session_stopped_cb (Session *session, Seat *seat) /* We were waiting for this session, but it didn't start :( */ // FIXME: Start a greeter on this? if (session == seat->priv->session_to_activate) - { - g_object_unref (seat->priv->session_to_activate); - seat->priv->session_to_activate = NULL; - } + g_clear_object (&seat->priv->session_to_activate); if (seat->priv->stopping) { @@ -790,9 +774,28 @@ session_stopped_cb (Session *session, Seat *seat) g_object_unref (session); return; } + + /* If there is a pending replacement greeter, start it */ + if (IS_GREETER (session) && seat->priv->replacement_greeter) + { + Greeter *replacement_greeter = seat->priv->replacement_greeter; + seat->priv->replacement_greeter = NULL; + + if (session_get_is_authenticated (SESSION (replacement_greeter))) + { + l_debug (seat, "Greeter stopped, running session"); + run_session (seat, SESSION (replacement_greeter)); + } + else + { + l_debug (seat, "Greeter stopped, starting session authentication"); + start_session (seat, SESSION (replacement_greeter)); + } + g_object_unref (replacement_greeter); + } /* If this is the greeter session then re-use this display server */ - if (IS_GREETER (session) && + else if (IS_GREETER (session) && can_share_display_server (seat, display_server) && greeter_get_start_session (GREETER (session))) { @@ -1200,8 +1203,7 @@ greeter_start_session_cb (Greeter *greeter, SessionType type, const gchar *sessi } /* Switch to this session when it is ready */ - if (seat->priv->session_to_activate) - g_object_unref (seat->priv->session_to_activate); + g_clear_object (&seat->priv->session_to_activate); seat->priv->session_to_activate = g_object_ref (session); /* Return to existing session if it is open */ @@ -1432,8 +1434,7 @@ seat_switch_to_greeter (Seat *seat) if (!greeter_session) return FALSE; - if (seat->priv->session_to_activate) - g_object_unref (seat->priv->session_to_activate); + g_clear_object (&seat->priv->session_to_activate); seat->priv->session_to_activate = g_object_ref (greeter_session); display_server = create_display_server (seat, SESSION (greeter_session)); @@ -1465,8 +1466,7 @@ switch_authentication_complete_cb (Session *session, Seat *seat) else { l_debug (seat, "Session authenticated, starting display server"); - if (seat->priv->session_to_activate) - g_object_unref (seat->priv->session_to_activate); + g_clear_object (&seat->priv->session_to_activate); seat->priv->session_to_activate = g_object_ref (session); display_server = create_display_server (seat, session); session_set_display_server (session, display_server); @@ -1504,8 +1504,7 @@ switch_authentication_complete_cb (Session *session, Seat *seat) } else { - if (seat->priv->session_to_activate) - g_object_unref (seat->priv->session_to_activate); + g_clear_object (&seat->priv->session_to_activate); seat->priv->session_to_activate = g_object_ref (greeter_session); display_server = create_display_server (seat, SESSION (greeter_session)); @@ -1581,8 +1580,7 @@ seat_switch_to_guest (Seat *seat, const gchar *session_name) display_server = create_display_server (seat, session); - if (seat->priv->session_to_activate) - g_object_unref (seat->priv->session_to_activate); + g_clear_object (&seat->priv->session_to_activate); seat->priv->session_to_activate = g_object_ref (session); session_set_pam_service (session, seat_get_string_property (seat, "pam-autologin-service")); session_set_display_server (session, display_server); @@ -1594,14 +1592,17 @@ gboolean seat_lock (Seat *seat, const gchar *username) { Greeter *greeter_session; - DisplayServer *display_server; - gboolean existing = FALSE; + DisplayServer *display_server = NULL; + gboolean reset_existing = FALSE; + gboolean reuse_xserver = FALSE; g_return_val_if_fail (seat != NULL, FALSE); if (!seat_get_can_switch (seat)) return FALSE; + // FIXME: If already locked then don't bother... + l_debug (seat, "Locking"); /* Switch to greeter we can reuse */ @@ -1610,10 +1611,23 @@ seat_lock (Seat *seat, const gchar *username) { l_debug (seat, "Switching to existing greeter"); set_greeter_hints (seat, greeter_session); - existing = TRUE; + reset_existing = TRUE; } else { + /* If the existing greeter can't be reused, stop it and reuse its display server */ + greeter_session = find_greeter_session (seat); + if (greeter_session) + { + display_server = session_get_display_server (SESSION (greeter_session)); + if (!session_get_is_stopping (SESSION (greeter_session))) + { + l_debug (seat, "Stopping session"); + session_stop (SESSION (greeter_session)); + } + reuse_xserver = TRUE; + } + greeter_session = create_greeter_session (seat); if (!greeter_session) return FALSE; @@ -1623,7 +1637,7 @@ seat_lock (Seat *seat, const gchar *username) if (username) greeter_set_hint (greeter_session, "select-user", username); - if (existing) + if (reset_existing) { greeter_reset (greeter_session); seat_set_active_session (seat, SESSION (greeter_session)); @@ -1631,14 +1645,21 @@ seat_lock (Seat *seat, const gchar *username) } else { - display_server = create_display_server (seat, SESSION (greeter_session)); + if (!reuse_xserver) + display_server = create_display_server (seat, SESSION (greeter_session)); + session_set_display_server (SESSION (greeter_session), display_server); - if (seat->priv->session_to_activate) - g_object_unref (seat->priv->session_to_activate); + g_clear_object (&seat->priv->session_to_activate); seat->priv->session_to_activate = g_object_ref (greeter_session); - session_set_display_server (SESSION (greeter_session), display_server); - return display_server_start (display_server); + if (reuse_xserver) + { + g_clear_object (&seat->priv->replacement_greeter); + seat->priv->replacement_greeter = g_object_ref (greeter_session); + return TRUE; + } + else + return display_server_start (display_server); } } @@ -1706,8 +1727,7 @@ seat_real_start (Seat *seat) { DisplayServer *display_server; - if (seat->priv->session_to_activate) - g_object_unref (seat->priv->session_to_activate); + g_clear_object (&seat->priv->session_to_activate); seat->priv->session_to_activate = g_object_ref (session); display_server = create_display_server (seat, session); @@ -1736,8 +1756,7 @@ seat_real_start (Seat *seat) return FALSE; } - if (seat->priv->session_to_activate) - g_object_unref (seat->priv->session_to_activate); + g_clear_object (&seat->priv->session_to_activate); seat->priv->session_to_activate = g_object_ref (greeter_session); session = SESSION (greeter_session); @@ -1852,11 +1871,9 @@ seat_init (Seat *seat) static void seat_finalize (GObject *object) { - Seat *self; + Seat *self = SEAT (object); GList *link; - self = SEAT (object); - g_free (self->priv->name); g_hash_table_unref (self->priv->properties); for (link = self->priv->display_servers; link; link = link->next) @@ -1871,12 +1888,10 @@ seat_finalize (GObject *object) g_signal_handlers_disconnect_matched (session, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, self); } g_list_free_full (self->priv->sessions, g_object_unref); - if (self->priv->active_session) - g_object_unref (self->priv->active_session); - if (self->priv->next_session) - g_object_unref (self->priv->next_session); - if (self->priv->session_to_activate) - g_object_unref (self->priv->session_to_activate); + g_clear_object (&self->priv->active_session); + g_clear_object (&self->priv->next_session); + g_clear_object (&self->priv->session_to_activate); + g_clear_object (&self->priv->replacement_greeter); G_OBJECT_CLASS (seat_parent_class)->finalize (object); } diff --git a/src/session.c b/src/session.c index e25a69a5..f7f4ac09 100644 --- a/src/session.c +++ b/src/session.c @@ -135,8 +135,7 @@ session_set_config (Session *session, SessionConfig *config) { g_return_if_fail (session != NULL); - if (session->priv->config) - g_object_unref (session->priv->config); + g_clear_object (&session->priv->config); session->priv->config = g_object_ref (config); } @@ -246,11 +245,7 @@ void session_set_x_authority (Session *session, XAuthority *authority, gboolean use_system_location) { g_return_if_fail (session != NULL); - if (session->priv->x_authority) - { - g_object_unref (session->priv->x_authority); - session->priv->x_authority = NULL; - } + g_clear_object (&session->priv->x_authority); if (authority) session->priv->x_authority = g_object_ref (authority); session->priv->x_authority_use_system_location = use_system_location; @@ -484,9 +479,7 @@ from_child_cb (GIOChannel *source, GIOCondition condition, gpointer data) { g_free (session->priv->username); session->priv->username = username; - if (session->priv->user) - g_object_unref (session->priv->user); - session->priv->user = NULL; + g_clear_object (&session->priv->user); } else g_free (username); @@ -920,10 +913,8 @@ session_finalize (GObject *object) Session *self = SESSION (object); int i; - if (self->priv->config) - g_object_unref (self->priv->config); - if (self->priv->display_server) - g_object_unref (self->priv->display_server); + g_clear_object (&self->priv->config); + g_clear_object (&self->priv->display_server); if (self->priv->pid) kill (self->priv->pid, SIGKILL); close (self->priv->to_child_input); @@ -935,8 +926,7 @@ session_finalize (GObject *object) if (self->priv->child_watch) g_source_remove (self->priv->child_watch); g_free (self->priv->username); - if (self->priv->user) - g_object_unref (self->priv->user); + g_clear_object (&self->priv->user); g_free (self->priv->pam_service); for (i = 0; i < self->priv->messages_length; i++) g_free ((char *) self->priv->messages[i].msg); @@ -945,8 +935,7 @@ session_finalize (GObject *object) g_free (self->priv->log_filename); g_free (self->priv->tty); g_free (self->priv->xdisplay); - if (self->priv->x_authority) - g_object_unref (self->priv->x_authority); + g_clear_object (&self->priv->x_authority); g_free (self->priv->remote_host_name); g_free (self->priv->login1_session_id); g_free (self->priv->console_kit_cookie); diff --git a/src/shared-data-manager.c b/src/shared-data-manager.c index 47f1c10d..fd7427e3 100644 --- a/src/shared-data-manager.c +++ b/src/shared-data-manager.c @@ -49,11 +49,7 @@ shared_data_manager_get_instance (void) void shared_data_manager_cleanup (void) { - if (singleton) - { - g_object_unref (singleton); - singleton = NULL; - } + g_clear_object (&singleton); } static void @@ -245,22 +241,14 @@ shared_data_manager_init (SharedDataManager *manager) } static void -shared_data_manager_dispose (GObject *object) +shared_data_manager_finalize (GObject *object) { SharedDataManager *self = SHARED_DATA_MANAGER (object); - + /* Should also cancel outstanding GIO operations, but whatever, let them do their thing. */ g_signal_handlers_disconnect_by_data (common_user_list_get_instance (), self); - G_OBJECT_CLASS (shared_data_manager_parent_class)->dispose (object); -} - -static void -shared_data_manager_finalize (GObject *object) -{ - SharedDataManager *self = SHARED_DATA_MANAGER (object); - if (self->priv->starting_dirs) g_hash_table_destroy (self->priv->starting_dirs); @@ -274,7 +262,6 @@ shared_data_manager_class_init (SharedDataManagerClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); - object_class->dispose = shared_data_manager_dispose; object_class->finalize = shared_data_manager_finalize; g_type_class_add_private (klass, sizeof (SharedDataManagerPrivate)); diff --git a/src/unity-system-compositor.c b/src/unity-system-compositor.c index f4b74eb1..0b89d2c2 100644 --- a/src/unity-system-compositor.c +++ b/src/unity-system-compositor.c @@ -482,9 +482,7 @@ unity_system_compositor_init (UnitySystemCompositor *compositor) static void unity_system_compositor_finalize (GObject *object) { - UnitySystemCompositor *self; - - self = UNITY_SYSTEM_COMPOSITOR (object); + UnitySystemCompositor *self = UNITY_SYSTEM_COMPOSITOR (object); if (self->priv->process) { diff --git a/src/vnc-server.c b/src/vnc-server.c index d4e6e9d9..914a5ebd 100644 --- a/src/vnc-server.c +++ b/src/vnc-server.c @@ -179,15 +179,11 @@ vnc_server_init (VNCServer *server) static void vnc_server_finalize (GObject *object) { - VNCServer *self; - - self = VNC_SERVER (object); + VNCServer *self = VNC_SERVER (object); g_free (self->priv->listen_address); - if (self->priv->socket) - g_object_unref (self->priv->socket); - if (self->priv->socket6) - g_object_unref (self->priv->socket6); + g_clear_object (&self->priv->socket); + g_clear_object (&self->priv->socket6); G_OBJECT_CLASS (vnc_server_parent_class)->finalize (object); } diff --git a/src/wayland-session.c b/src/wayland-session.c index 19a50aa5..639893ea 100644 --- a/src/wayland-session.c +++ b/src/wayland-session.c @@ -81,9 +81,7 @@ wayland_session_init (WaylandSession *session) static void wayland_session_finalize (GObject *object) { - WaylandSession *self; - - self = WAYLAND_SESSION (object); + WaylandSession *self = WAYLAND_SESSION (object); if (self->priv->have_vt_ref) vt_unref (self->priv->vt); diff --git a/src/x-authority.c b/src/x-authority.c index 25f66438..6e08d12e 100644 --- a/src/x-authority.c +++ b/src/x-authority.c @@ -372,9 +372,7 @@ x_authority_init (XAuthority *auth) static void x_authority_finalize (GObject *object) { - XAuthority *self; - - self = X_AUTHORITY (object); + XAuthority *self = X_AUTHORITY (object); g_free (self->priv->address); g_free (self->priv->number); diff --git a/src/x-server-local.c b/src/x-server-local.c index d9b03982..dcbfbc0a 100644 --- a/src/x-server-local.c +++ b/src/x-server-local.c @@ -610,9 +610,7 @@ x_server_local_init (XServerLocal *server) static void x_server_local_finalize (GObject *object) { - XServerLocal *self; - - self = X_SERVER_LOCAL (object); + XServerLocal *self = X_SERVER_LOCAL (object); if (self->priv->x_server_process) { diff --git a/src/x-server-xvnc.c b/src/x-server-xvnc.c index a48290e5..aea28177 100644 --- a/src/x-server-xvnc.c +++ b/src/x-server-xvnc.c @@ -158,8 +158,7 @@ stopped_cb (Process *process, XServerXVNC *server) { l_debug (server, "Xvnc server stopped"); - g_object_unref (server->priv->x_server_process); - server->priv->x_server_process = NULL; + g_clear_object (&server->priv->x_server_process); x_server_local_release_display_number (x_server_get_display_number (X_SERVER (server))); @@ -291,12 +290,9 @@ x_server_xvnc_init (XServerXVNC *server) static void x_server_xvnc_finalize (GObject *object) { - XServerXVNC *self; + XServerXVNC *self = X_SERVER_XVNC (object); - self = X_SERVER_XVNC (object); - - if (self->priv->x_server_process) - g_object_unref (self->priv->x_server_process); + g_clear_object (&self->priv->x_server_process); g_free (self->priv->command); g_free (self->priv->authority_file); diff --git a/src/x-server.c b/src/x-server.c index 10ba903a..d0260bef 100644 --- a/src/x-server.c +++ b/src/x-server.c @@ -90,12 +90,9 @@ x_server_set_authority (XServer *server, XAuthority *authority) { g_return_if_fail (server != NULL); - if (server->priv->authority) - g_object_unref (server->priv->authority); + g_clear_object (&server->priv->authority); if (authority) server->priv->authority = g_object_ref (authority); - else - server->priv->authority = NULL; } XAuthority * @@ -204,14 +201,11 @@ x_server_init (XServer *server) static void x_server_finalize (GObject *object) { - XServer *self; - - self = X_SERVER (object); + XServer *self = X_SERVER (object); g_free (self->priv->hostname); g_free (self->priv->address); - if (self->priv->authority) - g_object_unref (self->priv->authority); + g_clear_object (&self->priv->authority); if (self->priv->connection) xcb_disconnect (self->priv->connection); diff --git a/src/xdmcp-server.c b/src/xdmcp-server.c index 197dbc11..4761b7b0 100644 --- a/src/xdmcp-server.c +++ b/src/xdmcp-server.c @@ -743,14 +743,10 @@ xdmcp_server_init (XDMCPServer *server) static void xdmcp_server_finalize (GObject *object) { - XDMCPServer *self; + XDMCPServer *self = XDMCP_SERVER (object); - self = XDMCP_SERVER (object); - - if (self->priv->socket) - g_object_unref (self->priv->socket); - if (self->priv->socket6) - g_object_unref (self->priv->socket6); + g_clear_object (&self->priv->socket); + g_clear_object (&self->priv->socket6); g_free (self->priv->listen_address); g_free (self->priv->hostname); g_free (self->priv->status); diff --git a/src/xdmcp-session.c b/src/xdmcp-session.c index 71c5704d..bb78ac66 100644 --- a/src/xdmcp-session.c +++ b/src/xdmcp-session.c @@ -77,15 +77,11 @@ xdmcp_session_init (XDMCPSession *session) static void xdmcp_session_finalize (GObject *object) { - XDMCPSession *self; - - self = XDMCP_SESSION (object); + XDMCPSession *self = XDMCP_SESSION (object); g_free (self->priv->manufacturer_display_id); - if (self->priv->address) - g_object_unref (self->priv->address); - if (self->priv->authority) - g_object_unref (self->priv->authority); + g_clear_object (&self->priv->address); + g_clear_object (&self->priv->authority); g_free (self->priv->display_class); G_OBJECT_CLASS (xdmcp_session_parent_class)->finalize (object); diff --git a/tests/Makefile.am b/tests/Makefile.am index b4d73c65..a96c77f1 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -134,9 +134,11 @@ TESTS = \ test-dbus \ test-lock-seat \ test-lock-seat-after-vt-switch \ + test-lock-seat-twice \ test-lock-seat-resettable \ test-lock-seat-return-session \ test-lock-session \ + test-lock-session-twice \ test-lock-session-no-password \ test-lock-session-resettable \ test-lock-session-return-session \ @@ -434,10 +436,12 @@ EXTRA_DIST = \ scripts/lock-seat-resettable.conf \ scripts/lock-seat-return-session.conf \ scripts/lock-seat-return-session-console-kit.conf \ + scripts/lock-seat-twice.conf \ scripts/lock-session.conf \ scripts/lock-session-no-password.conf \ scripts/lock-session-resettable.conf \ scripts/lock-session-return-session.conf \ + scripts/lock-session-twice.conf \ scripts/login.conf \ scripts/login-crash-authenticate.conf \ scripts/login-guest.conf \ diff --git a/tests/scripts/lock-seat-after-vt-switch.conf b/tests/scripts/lock-seat-after-vt-switch.conf index 4a20ea19..d9cb9ccb 100644 --- a/tests/scripts/lock-seat-after-vt-switch.conf +++ b/tests/scripts/lock-seat-after-vt-switch.conf @@ -61,21 +61,19 @@ user-session=default # Lock the seat again #?*SESSION-X-0 LOCK-SEAT #?SESSION-X-0 LOCK-SEAT - -# New X server starts (this is a "bug") -#?XSERVER-2 START VT=9 SEAT=seat0 -#?*XSERVER-2 INDICATE-READY -#?XSERVER-2 INDICATE-READY -#?XSERVER-2 ACCEPT-CONNECT - -# Session is locked #?LOGIN1 LOCK-SESSION SESSION=c0 -# Session is switched to greeter -#?LOGIN1 ACTIVATE-SESSION SESSION=c1 +# Old greeter is stopped +#?GREETER-X-1 TERMINATE SIGNAL=15 -# The unnecessary X server is killed -#?XSERVER-2 TERMINATE SIGNAL=15 +# A new greeter is started and activated on the same X server +#?LOGIN1 ACTIVATE-SESSION SESSION=c2 +#?GREETER-X-1 START XDG_SEAT=seat0 XDG_VTNR=8 XDG_SESSION_CLASS=greeter +#?XSERVER-1 ACCEPT-CONNECT +#?GREETER-X-1 CONNECT-XSERVER +#?GREETER-X-1 CONNECT-TO-DAEMON +#?GREETER-X-1 CONNECTED-TO-DAEMON +#?GREETER-X-1 LOCK-HINT # Cleanup #?*STOP-DAEMON diff --git a/tests/scripts/lock-seat-twice.conf b/tests/scripts/lock-seat-twice.conf new file mode 100644 index 00000000..c8d6dc8e --- /dev/null +++ b/tests/scripts/lock-seat-twice.conf @@ -0,0 +1,75 @@ +# +# Check locking a seat twice doesn't spawn two greeters +# + +[SeatDefaults] +autologin-user=have-password1 +user-session=default + +#?*START-DAEMON +#?RUNNER DAEMON-START + +# X server starts +#?XSERVER-0 START VT=7 SEAT=seat0 + +# Daemon connects when X server is ready +#?*XSERVER-0 INDICATE-READY +#?XSERVER-0 INDICATE-READY +#?XSERVER-0 ACCEPT-CONNECT + +# Session starts +#?SESSION-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_GREETER_DATA_DIR=.*/have-password1 XDG_SESSION_TYPE=x11 XDG_SESSION_DESKTOP=default USER=have-password1 +#?LOGIN1 ACTIVATE-SESSION SESSION=c0 +#?XSERVER-0 ACCEPT-CONNECT +#?SESSION-X-0 CONNECT-XSERVER + +# Lock the seat +#?*SESSION-X-0 LOCK-SEAT +#?SESSION-X-0 LOCK-SEAT + +# New X server starts +#?XSERVER-1 START VT=8 SEAT=seat0 + +# Daemon connects when X server is ready +#?*XSERVER-1 INDICATE-READY +#?XSERVER-1 INDICATE-READY +#?XSERVER-1 ACCEPT-CONNECT + +# Session is locked +#?LOGIN1 LOCK-SESSION SESSION=c0 + +# Greeter starts +#?GREETER-X-1 START XDG_SEAT=seat0 XDG_VTNR=8 XDG_SESSION_CLASS=greeter +#?XSERVER-1 ACCEPT-CONNECT +#?GREETER-X-1 CONNECT-XSERVER +#?GREETER-X-1 CONNECT-TO-DAEMON +#?GREETER-X-1 CONNECTED-TO-DAEMON +#?GREETER-X-1 LOCK-HINT + +# Switch to greeter +#?LOGIN1 ACTIVATE-SESSION SESSION=c1 +#?VT ACTIVATE VT=8 + +# Lock the seat again +#?*SESSION-X-0 LOCK-SEAT +#?SESSION-X-0 LOCK-SEAT + +# Old greeter is stopped +#?GREETER-X-1 TERMINATE SIGNAL=15 + +# A new greeter is started and activated on the same X server +#?LOGIN1 ACTIVATE-SESSION SESSION=c2 +#?GREETER-X-1 START XDG_SEAT=seat0 XDG_VTNR=8 XDG_SESSION_CLASS=greeter +#?XSERVER-1 ACCEPT-CONNECT +#?GREETER-X-1 CONNECT-XSERVER +#?GREETER-X-1 CONNECT-TO-DAEMON +#?GREETER-X-1 CONNECTED-TO-DAEMON +#?GREETER-X-1 LOCK-HINT + +# Cleanup +#?*STOP-DAEMON +#?SESSION-X-0 TERMINATE SIGNAL=15 +#?XSERVER-0 TERMINATE SIGNAL=15 +#?GREETER-X-1 TERMINATE SIGNAL=15 +#?XSERVER-1 TERMINATE SIGNAL=15 +#?RUNNER DAEMON-EXIT STATUS=0 diff --git a/tests/scripts/lock-session-twice.conf b/tests/scripts/lock-session-twice.conf new file mode 100644 index 00000000..e7f20c3d --- /dev/null +++ b/tests/scripts/lock-session-twice.conf @@ -0,0 +1,77 @@ +# +# Check locking a session twice doesn't spawn two greeters +# + +[SeatDefaults] +autologin-user=have-password1 +user-session=default + +#?*START-DAEMON +#?RUNNER DAEMON-START + +# X server starts +#?XSERVER-0 START VT=7 SEAT=seat0 + +# Daemon connects when X server is ready +#?*XSERVER-0 INDICATE-READY +#?XSERVER-0 INDICATE-READY +#?XSERVER-0 ACCEPT-CONNECT + +# Session starts +#?SESSION-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_GREETER_DATA_DIR=.*/have-password1 XDG_SESSION_TYPE=x11 XDG_SESSION_DESKTOP=default USER=have-password1 +#?LOGIN1 ACTIVATE-SESSION SESSION=c0 +#?XSERVER-0 ACCEPT-CONNECT +#?SESSION-X-0 CONNECT-XSERVER + +# Lock the session +#?*SESSION-X-0 LOCK-SESSION +#?SESSION-X-0 LOCK-SESSION + +# New X server starts +#?XSERVER-1 START VT=8 SEAT=seat0 + +# Daemon connects when X server is ready +#?*XSERVER-1 INDICATE-READY +#?XSERVER-1 INDICATE-READY +#?XSERVER-1 ACCEPT-CONNECT + +# Session is locked +#?LOGIN1 LOCK-SESSION SESSION=c0 + +# Greeter starts with session user selected +#?GREETER-X-1 START XDG_SEAT=seat0 XDG_VTNR=8 XDG_SESSION_CLASS=greeter +#?XSERVER-1 ACCEPT-CONNECT +#?GREETER-X-1 CONNECT-XSERVER +#?GREETER-X-1 CONNECT-TO-DAEMON +#?GREETER-X-1 CONNECTED-TO-DAEMON +#?GREETER-X-1 SELECT-USER-HINT USERNAME=have-password1 +#?GREETER-X-1 LOCK-HINT + +# Switch to greeter +#?LOGIN1 ACTIVATE-SESSION SESSION=c1 +#?VT ACTIVATE VT=8 + +# Lock the session again +#?*SESSION-X-0 LOCK-SESSION +#?SESSION-X-0 LOCK-SESSION + +# Old greeter is stopped +#?GREETER-X-1 TERMINATE SIGNAL=15 +#?LOGIN1 ACTIVATE-SESSION SESSION=c2 + +# A new greeter is started and activated on the same X server +#?GREETER-X-1 START XDG_SEAT=seat0 XDG_VTNR=8 XDG_SESSION_CLASS=greeter +#?XSERVER-1 ACCEPT-CONNECT +#?GREETER-X-1 CONNECT-XSERVER +#?GREETER-X-1 CONNECT-TO-DAEMON +#?GREETER-X-1 CONNECTED-TO-DAEMON +#?GREETER-X-1 SELECT-USER-HINT USERNAME=have-password1 +#?GREETER-X-1 LOCK-HINT + +# Cleanup +#?*STOP-DAEMON +#?SESSION-X-0 TERMINATE SIGNAL=15 +#?XSERVER-0 TERMINATE SIGNAL=15 +#?GREETER-X-1 TERMINATE SIGNAL=15 +#?XSERVER-1 TERMINATE SIGNAL=15 +#?RUNNER DAEMON-EXIT STATUS=0 diff --git a/tests/test-lock-seat-twice b/tests/test-lock-seat-twice new file mode 100755 index 00000000..d39c9855 --- /dev/null +++ b/tests/test-lock-seat-twice @@ -0,0 +1,2 @@ +#!/bin/sh +./src/dbus-env ./src/test-runner lock-seat-twice test-gobject-greeter diff --git a/tests/test-lock-session-twice b/tests/test-lock-session-twice new file mode 100755 index 00000000..61b09d1f --- /dev/null +++ b/tests/test-lock-session-twice @@ -0,0 +1,2 @@ +#!/bin/sh +./src/dbus-env ./src/test-runner lock-session-twice test-gobject-greeter |