summaryrefslogtreecommitdiff
path: root/daemon/gdm-launch-environment.c
diff options
context:
space:
mode:
authorRay Strode <rstrode@redhat.com>2014-03-17 15:55:47 -0400
committerRay Strode <rstrode@redhat.com>2014-03-17 16:11:34 -0400
commit236102c0e17a1b13328dd86f60cc0495ebd3d03b (patch)
tree439fcc6cdd7093356dcb127d817f886d959ea1a3 /daemon/gdm-launch-environment.c
parenta283cbadd81b499ee438ee20e6c080f767cfdbef (diff)
downloadgdm-236102c0e17a1b13328dd86f60cc0495ebd3d03b.tar.gz
launch-environment: disconnect session signal handlers when destroyed
The launch environment's session can actually live longer than the environment itself. This is because the session creates internals "conversation" objects that take a reference on the session, which sometimes keeps it on life support. This commit makes sure the session signal handlers for the launch environment don't get run after the launch environment is destroyed. https://bugzilla.gnome.org/show_bug.cgi?id=726380
Diffstat (limited to 'daemon/gdm-launch-environment.c')
-rw-r--r--daemon/gdm-launch-environment.c63
1 files changed, 35 insertions, 28 deletions
diff --git a/daemon/gdm-launch-environment.c b/daemon/gdm-launch-environment.c
index 89af3679..195bf592 100644
--- a/daemon/gdm-launch-environment.c
+++ b/daemon/gdm-launch-environment.c
@@ -470,34 +470,41 @@ gdm_launch_environment_start (GdmLaunchEnvironment *launch_environment)
launch_environment->priv->x11_display_is_local,
NULL);
- g_signal_connect (launch_environment->priv->session,
- "conversation-started",
- G_CALLBACK (on_conversation_started),
- launch_environment);
- g_signal_connect (launch_environment->priv->session,
- "conversation-stopped",
- G_CALLBACK (on_conversation_stopped),
- launch_environment);
- g_signal_connect (launch_environment->priv->session,
- "setup-complete",
- G_CALLBACK (on_session_setup_complete),
- launch_environment);
- g_signal_connect (launch_environment->priv->session,
- "session-opened",
- G_CALLBACK (on_session_opened),
- launch_environment);
- g_signal_connect (launch_environment->priv->session,
- "session-started",
- G_CALLBACK (on_session_started),
- launch_environment);
- g_signal_connect (launch_environment->priv->session,
- "session-exited",
- G_CALLBACK (on_session_exited),
- launch_environment);
- g_signal_connect (launch_environment->priv->session,
- "session-died",
- G_CALLBACK (on_session_died),
- launch_environment);
+ g_signal_connect_object (launch_environment->priv->session,
+ "conversation-started",
+ G_CALLBACK (on_conversation_started),
+ launch_environment,
+ 0);
+ g_signal_connect_object (launch_environment->priv->session,
+ "conversation-stopped",
+ G_CALLBACK (on_conversation_stopped),
+ launch_environment,
+ 0);
+ g_signal_connect_object (launch_environment->priv->session,
+ "setup-complete",
+ G_CALLBACK (on_session_setup_complete),
+ launch_environment,
+ 0);
+ g_signal_connect_object (launch_environment->priv->session,
+ "session-opened",
+ G_CALLBACK (on_session_opened),
+ launch_environment,
+ 0);
+ g_signal_connect_object (launch_environment->priv->session,
+ "session-started",
+ G_CALLBACK (on_session_started),
+ launch_environment,
+ 0);
+ g_signal_connect_object (launch_environment->priv->session,
+ "session-exited",
+ G_CALLBACK (on_session_exited),
+ launch_environment,
+ 0);
+ g_signal_connect_object (launch_environment->priv->session,
+ "session-died",
+ G_CALLBACK (on_session_died),
+ launch_environment,
+ 0);
gdm_session_start_conversation (launch_environment->priv->session, "gdm-launch-environment");