|
|
01018b |
From 199c86579be9f674bdfd53e75a226b7a2d312d31 Mon Sep 17 00:00:00 2001
|
|
|
01018b |
From: Ray Strode <rstrode@redhat.com>
|
|
|
01018b |
Date: Mon, 16 Dec 2013 16:57:19 -0500
|
|
|
01018b |
Subject: [PATCH] slave: fix infinite loop on shutdown
|
|
|
01018b |
|
|
|
01018b |
we stop something that calls stop in some circumstances.
|
|
|
01018b |
|
|
|
01018b |
This commit breaks the loop.
|
|
|
01018b |
|
|
|
01018b |
https://bugzilla.gnome.org/show_bug.cgi?id=712767
|
|
|
01018b |
---
|
|
|
01018b |
daemon/gdm-simple-slave.c | 19 +++++++++++++++++--
|
|
|
01018b |
1 file changed, 17 insertions(+), 2 deletions(-)
|
|
|
01018b |
|
|
|
01018b |
diff --git a/daemon/gdm-simple-slave.c b/daemon/gdm-simple-slave.c
|
|
|
01018b |
index 1fe58bc..d83216b 100644
|
|
|
01018b |
--- a/daemon/gdm-simple-slave.c
|
|
|
01018b |
+++ b/daemon/gdm-simple-slave.c
|
|
|
01018b |
@@ -1641,62 +1641,77 @@ gdm_simple_slave_open_reauthentication_channel (GdmSlave *slave,
|
|
|
01018b |
g_object_ref (result));
|
|
|
01018b |
|
|
|
01018b |
gdm_session_start_reauthentication (self->priv->session,
|
|
|
01018b |
pid_of_caller,
|
|
|
01018b |
uid_of_caller);
|
|
|
01018b |
}
|
|
|
01018b |
|
|
|
01018b |
g_object_unref (result);
|
|
|
01018b |
}
|
|
|
01018b |
|
|
|
01018b |
static gboolean
|
|
|
01018b |
gdm_simple_slave_start (GdmSlave *slave)
|
|
|
01018b |
{
|
|
|
01018b |
GDM_SLAVE_CLASS (gdm_simple_slave_parent_class)->start (slave);
|
|
|
01018b |
|
|
|
01018b |
gdm_simple_slave_run (GDM_SIMPLE_SLAVE (slave));
|
|
|
01018b |
|
|
|
01018b |
return TRUE;
|
|
|
01018b |
}
|
|
|
01018b |
|
|
|
01018b |
static gboolean
|
|
|
01018b |
gdm_simple_slave_stop (GdmSlave *slave)
|
|
|
01018b |
{
|
|
|
01018b |
GdmSimpleSlave *self = GDM_SIMPLE_SLAVE (slave);
|
|
|
01018b |
|
|
|
01018b |
g_debug ("GdmSimpleSlave: Stopping simple_slave");
|
|
|
01018b |
|
|
|
01018b |
GDM_SLAVE_CLASS (gdm_simple_slave_parent_class)->stop (slave);
|
|
|
01018b |
|
|
|
01018b |
if (self->priv->greeter_environment != NULL) {
|
|
|
01018b |
- stop_greeter (self);
|
|
|
01018b |
- self->priv->greeter_environment = NULL;
|
|
|
01018b |
+ g_signal_handlers_disconnect_by_func (G_OBJECT (self->priv->greeter_environment),
|
|
|
01018b |
+ G_CALLBACK (on_greeter_environment_session_opened),
|
|
|
01018b |
+ self);
|
|
|
01018b |
+ g_signal_handlers_disconnect_by_func (G_OBJECT (self->priv->greeter_environment),
|
|
|
01018b |
+ G_CALLBACK (on_greeter_environment_session_started),
|
|
|
01018b |
+ self);
|
|
|
01018b |
+ g_signal_handlers_disconnect_by_func (G_OBJECT (self->priv->greeter_environment),
|
|
|
01018b |
+ G_CALLBACK (on_greeter_environment_session_stopped),
|
|
|
01018b |
+ self);
|
|
|
01018b |
+ g_signal_handlers_disconnect_by_func (G_OBJECT (self->priv->greeter_environment),
|
|
|
01018b |
+ G_CALLBACK (on_greeter_environment_session_exited),
|
|
|
01018b |
+ self);
|
|
|
01018b |
+ g_signal_handlers_disconnect_by_func (G_OBJECT (self->priv->greeter_environment),
|
|
|
01018b |
+ G_CALLBACK (on_greeter_environment_session_died),
|
|
|
01018b |
+ self);
|
|
|
01018b |
+ gdm_launch_environment_stop (GDM_LAUNCH_ENVIRONMENT (self->priv->greeter_environment));
|
|
|
01018b |
+ g_clear_object (&self->priv->greeter_environment);
|
|
|
01018b |
}
|
|
|
01018b |
|
|
|
01018b |
if (self->priv->start_session_id > 0) {
|
|
|
01018b |
g_source_remove (self->priv->start_session_id);
|
|
|
01018b |
self->priv->start_session_id = 0;
|
|
|
01018b |
}
|
|
|
01018b |
|
|
|
01018b |
g_clear_pointer (&self->priv->start_session_service_name,
|
|
|
01018b |
(GDestroyNotify) g_free);
|
|
|
01018b |
|
|
|
01018b |
if (self->priv->session_is_running) {
|
|
|
01018b |
char *username;
|
|
|
01018b |
|
|
|
01018b |
/* Run the PostSession script. gdmslave suspends until script
|
|
|
01018b |
* has terminated
|
|
|
01018b |
*/
|
|
|
01018b |
username = gdm_session_get_username (self->priv->session);
|
|
|
01018b |
if (username != NULL) {
|
|
|
01018b |
gdm_slave_run_script (slave, GDMCONFDIR "/PostSession", username);
|
|
|
01018b |
}
|
|
|
01018b |
g_free (username);
|
|
|
01018b |
|
|
|
01018b |
#ifdef HAVE_LOGINDEVPERM
|
|
|
01018b |
gdm_simple_slave_revoke_console_permissions (self);
|
|
|
01018b |
#endif
|
|
|
01018b |
|
|
|
01018b |
self->priv->session_is_running = FALSE;
|
|
|
01018b |
}
|
|
|
01018b |
|
|
|
01018b |
if (self->priv->session != NULL) {
|
|
|
01018b |
--
|
|
|
01018b |
1.8.4.2
|
|
|
01018b |
|