diff --git a/gio/gnetworkmonitor.c b/gio/gnetworkmonitor.c index d65fc2bc4..f9853fca5 100644 --- a/gio/gnetworkmonitor.c +++ b/gio/gnetworkmonitor.c @@ -68,7 +68,7 @@ */ G_DEFINE_INTERFACE_WITH_CODE (GNetworkMonitor, g_network_monitor, G_TYPE_OBJECT, - g_type_interface_add_prerequisite (g_define_type_id, G_TYPE_INITABLE);) + g_type_interface_add_prerequisite (g_define_type_id, G_TYPE_INITABLE)) enum { diff --git a/gio/gnetworkmonitornm.c b/gio/gnetworkmonitornm.c index 9013fd49c..5a36a0ba1 100644 --- a/gio/gnetworkmonitornm.c +++ b/gio/gnetworkmonitornm.c @@ -68,6 +68,7 @@ typedef enum { struct _GNetworkMonitorNMPrivate { GDBusProxy *proxy; + guint signal_id; GNetworkConnectivity connectivity; gboolean network_available; @@ -267,8 +268,8 @@ update_cached_property (GDBusProxy *proxy, static void proxy_signal_cb (GDBusProxy *proxy, - gchar *sender_name, - gchar *signal_name, + const gchar *sender_name, + const gchar *signal_name, GVariant *parameters, GNetworkMonitorNM *nm) { @@ -360,8 +361,8 @@ g_network_monitor_nm_initable_init (GInitable *initable, return FALSE; } - g_signal_connect (G_OBJECT (proxy), "g-signal", - G_CALLBACK (proxy_signal_cb), nm); + nm->priv->signal_id = g_signal_connect (G_OBJECT (proxy), "g-signal", + G_CALLBACK (proxy_signal_cb), nm); nm->priv->proxy = proxy; sync_properties (nm, FALSE); @@ -373,6 +374,13 @@ g_network_monitor_nm_finalize (GObject *object) { GNetworkMonitorNM *nm = G_NETWORK_MONITOR_NM (object); + if (nm->priv->proxy != NULL && + nm->priv->signal_id != 0) + { + g_signal_handler_disconnect (nm->priv->proxy, + nm->priv->signal_id); + nm->priv->signal_id = 0; + } g_clear_object (&nm->priv->proxy); G_OBJECT_CLASS (g_network_monitor_nm_parent_class)->finalize (object); @@ -383,7 +391,7 @@ g_network_monitor_nm_class_init (GNetworkMonitorNMClass *nl_class) { GObjectClass *gobject_class = G_OBJECT_CLASS (nl_class); - gobject_class->finalize = g_network_monitor_nm_finalize; + gobject_class->finalize = g_network_monitor_nm_finalize; gobject_class->get_property = g_network_monitor_nm_get_property; g_object_class_override_property (gobject_class, PROP_NETWORK_AVAILABLE, "network-available"); diff --git a/gobject/tests/type.c b/gobject/tests/type.c index 1abe4823d..c5db7e992 100644 --- a/gobject/tests/type.c +++ b/gobject/tests/type.c @@ -33,7 +33,7 @@ typedef struct { GType foo_get_type (void); G_DEFINE_INTERFACE_WITH_CODE (Foo, foo, G_TYPE_OBJECT, - g_type_interface_add_prerequisite (g_define_type_id, bar_get_type ());) + g_type_interface_add_prerequisite (g_define_type_id, bar_get_type ())) static void foo_default_init (FooInterface *iface)