libnm-glib: disconnect the connectivity check cancellable signal after the call has ended (bgo #733915)

We cannot rely on connectivity data freeing to disconnect the signal,
because the simple async result might be kept alive by external
code (for example the language runtime for JS), but we must not
call dbus_g_proxy_cancel_call() if that cancellable is cancelled or
reused afterwards.

https://bugzilla.gnome.org/show_bug.cgi?id=733915
This commit is contained in:
Giovanni Campagna 2014-07-29 14:46:34 +02:00 committed by Dan Williams
parent c720d560b1
commit c4e325f8dd

View file

@ -1483,6 +1483,11 @@ check_connectivity_cb (DBusGProxy *proxy,
CheckConnectivityData *ccd = g_simple_async_result_get_op_res_gpointer (simple);
GError *error = NULL;
if (ccd->cancellable) {
g_signal_handler_disconnect (ccd->cancellable, ccd->cancelled_id);
ccd->cancelled_id = 0;
}
if (!dbus_g_proxy_end_call (proxy, call, &error,
G_TYPE_UINT, &ccd->connectivity,
G_TYPE_INVALID))