summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonny Lamb <jonny.lamb@collabora.co.uk>2011-04-06 10:34:02 +0100
committerJonny Lamb <jonny.lamb@collabora.co.uk>2011-04-06 10:36:34 +0100
commit3b75abc45c51f18be79ac15685efc28ecc822851 (patch)
treea3c80fd2c151e95aaec41a3d48b181cfcbd9b355
parentd208ffca52be5d0a0e585db8ea6d592ce84edfaa (diff)
meta-porter: disconnect porter signal handlers before trying to close it
Signed-off-by: Jonny Lamb <jonny.lamb@collabora.co.uk>
-rw-r--r--wocky/wocky-meta-porter.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/wocky/wocky-meta-porter.c b/wocky/wocky-meta-porter.c
index 1b5b6f9..165652d 100644
--- a/wocky/wocky-meta-porter.c
+++ b/wocky/wocky-meta-porter.c
@@ -115,6 +115,8 @@ wocky_meta_porter_error_quark (void)
static void register_porter_handlers (WockyMetaPorter *self,
WockyPorter *porter, WockyContact *contact);
+static void disconnect_porter_signal_handlers (WockyPorter *porter,
+ PorterData *data);
static void
porter_data_free (gpointer data)
@@ -123,6 +125,10 @@ porter_data_free (gpointer data)
if (p->porter != NULL)
{
+ /* We have to make sure we disconnect the handlers or ::closing
+ * will be fired by close_async, then the callback will unref
+ * p->porter before we have a chance to do it outselves. */
+ disconnect_porter_signal_handlers (p->porter, p);
wocky_porter_close_async (p->porter, NULL, NULL, NULL);
g_object_unref (p->porter);
}