$OpenBSD: patch-rest_rest-proxy-call_c,v 1.1 2013/09/26 07:44:22 jasper Exp $

From 2b363686aa1cbfa2d778a16b813472f1bf309cbf Mon Sep 17 00:00:00 2001
From: Alban Crequy <alban.crequy@collabora.co.uk>
Date: Mon, 17 Jun 2013 14:07:15 +0000
Subject: call: disconnect GCancellable 'cancel' signal

https://bugzilla.gnome.org/show_bug.cgi?id=702483

--- rest/rest-proxy-call.c.orig	Tue Aug 14 09:47:51 2012
+++ rest/rest-proxy-call.c	Thu Sep 26 08:44:18 2013
@@ -110,6 +110,12 @@ rest_proxy_call_dispose (GObject *object)
 {
   RestProxyCallPrivate *priv = GET_PRIVATE (object);
 
+  if (priv->cancellable)
+    {
+      g_signal_handler_disconnect (priv->cancellable, priv->cancel_sig);
+      g_clear_object (&priv->cancellable);
+    }
+
   if (priv->params)
   {
     rest_params_free (priv->params);
@@ -921,8 +927,6 @@ _call_message_call_completed_cb (SoupSession *session,
   call = REST_PROXY_CALL (
       g_async_result_get_source_object (G_ASYNC_RESULT (result)));
 
-  // FIXME: disconnect cancellable ?
-
   finish_call (call, message, &error);
 
   if (error != NULL)
@@ -973,8 +977,11 @@ rest_proxy_call_invoke_async (RestProxyCall      *call
                                       user_data, rest_proxy_call_invoke_async);
 
   if (cancellable != NULL)
-    g_signal_connect (cancellable, "cancelled",
-        G_CALLBACK (_call_message_call_cancelled_cb), call);
+    {
+      priv->cancel_sig = g_signal_connect (cancellable, "cancelled",
+          G_CALLBACK (_call_message_call_cancelled_cb), call);
+      priv->cancellable = g_object_ref (cancellable);
+    }
 
   _rest_proxy_queue_message (priv->proxy,
                              message,
@@ -1258,6 +1265,12 @@ rest_proxy_call_cancel (RestProxyCall *call)
 
   priv = GET_PRIVATE (call);
   closure = priv->cur_call_closure;
+
+  if (priv->cancellable)
+    {
+      g_signal_handler_disconnect (priv->cancellable, priv->cancel_sig);
+      g_clear_object (&priv->cancellable);
+    }
 
   if (closure)
   {
