[gdm] libgdm: don't ever user switch to closing login screen
- From: Ray Strode <halfline src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gdm] libgdm: don't ever user switch to closing login screen
- Date: Tue, 25 Sep 2012 17:59:57 +0000 (UTC)
commit 1fd23f7a6a3f6d40a555e990607d0b7392a1b9a9
Author: Ray Strode <rstrode redhat com>
Date: Mon Sep 24 21:53:05 2012 -0400
libgdm: don't ever user switch to closing login screen
bugs in login screen service can mean stray processes
laying around keeping the login screen session on life
support in a "closing" state.
libgdm will try to user switch to these defunct sessions.
This commit fixes that.
https://bugzilla.gnome.org/show_bug.cgi?id=684750
gui/libgdm/gdm-user-switching.c | 29 +++++++++++++++++++++++++++++
1 files changed, 29 insertions(+), 0 deletions(-)
---
diff --git a/gui/libgdm/gdm-user-switching.c b/gui/libgdm/gdm-user-switching.c
index ca4c7cd..693228e 100644
--- a/gui/libgdm/gdm-user-switching.c
+++ b/gui/libgdm/gdm-user-switching.c
@@ -409,6 +409,8 @@ get_login_window_session_id_for_systemd (const char *seat_id,
int res, i;
char **sessions;
char *service_id;
+ char *service_class;
+ char *state;
res = sd_seat_get_sessions (seat_id, &sessions, NULL, NULL);
if (res < 0) {
@@ -424,6 +426,33 @@ get_login_window_session_id_for_systemd (const char *seat_id,
for (i = 0; sessions[i]; i ++) {
+ res = sd_session_get_class (sessions[i], &service_class);
+ if (res < 0) {
+ g_debug ("failed to determine class of session %s: %s", sessions[i], strerror (-res));
+ ret = FALSE;
+ goto out;
+ }
+
+ if (strcmp (service_class, "greeter") != 0) {
+ free (service_class);
+ continue;
+ }
+
+ free (service_class);
+
+ ret = sd_session_get_state (sessions[i], &state);
+ if (ret < 0) {
+ g_debug ("failed to determine state of session %s: %s", sessions[i], strerror (-res));
+ ret = FALSE;
+ goto out;
+ }
+
+ if (g_strcmp0 (state, "closing") == 0) {
+ free (state);
+ continue;
+ }
+ free (state);
+
res = sd_session_get_service (sessions[i], &service_id);
if (res < 0) {
g_debug ("failed to determine service of session %s: %s", sessions[i], strerror (-res));
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]