diff options
author | Lubomir Rintel <lkundrak@v3.sk> | 2016-11-14 18:47:56 +0100 |
---|---|---|
committer | Lubomir Rintel <lkundrak@v3.sk> | 2016-11-14 20:22:23 +0100 |
commit | 4b7b518958a1baa805fec65c6b8a145cbc3df17d (patch) | |
tree | bfdce68bf95d3ddf7483316abe55c2f6f7262169 /libnm | |
parent | 446858cf8dd11c777b0d312a5f680d2905d3d09c (diff) | |
download | NetworkManager-4b7b518958a1baa805fec65c6b8a145cbc3df17d.tar.gz |
libnm: avoid leaking the interface proxies
_nm_object_get_proxy()'s semantics changed with the object-manager
branch merge: it now takes a reference.
Diffstat (limited to 'libnm')
-rw-r--r-- | libnm/nm-device-wifi.c | 2 | ||||
-rw-r--r-- | libnm/nm-device.c | 2 | ||||
-rw-r--r-- | libnm/nm-manager.c | 32 | ||||
-rw-r--r-- | libnm/nm-object.c | 6 | ||||
-rw-r--r-- | libnm/nm-remote-connection.c | 11 | ||||
-rw-r--r-- | libnm/nm-remote-settings.c | 1 | ||||
-rw-r--r-- | libnm/nm-vpn-connection.c | 1 |
7 files changed, 38 insertions, 17 deletions
diff --git a/libnm/nm-device-wifi.c b/libnm/nm-device-wifi.c index 5ed23130a8..e2d5917f62 100644 --- a/libnm/nm-device-wifi.c +++ b/libnm/nm-device-wifi.c @@ -770,6 +770,8 @@ dispose (GObject *object) if (priv->aps) clean_up_aps (NM_DEVICE_WIFI (object), TRUE); + g_clear_object (&priv->proxy); + G_OBJECT_CLASS (nm_device_wifi_parent_class)->dispose (object); } diff --git a/libnm/nm-device.c b/libnm/nm-device.c index e55549df48..26d83011cd 100644 --- a/libnm/nm-device.c +++ b/libnm/nm-device.c @@ -296,6 +296,8 @@ dispose (GObject *object) g_clear_pointer (&priv->available_connections, g_ptr_array_unref); g_clear_pointer (&priv->lldp_neighbors, g_ptr_array_unref); + g_clear_object (&priv->proxy); + G_OBJECT_CLASS (nm_device_parent_class)->dispose (object); } diff --git a/libnm/nm-manager.c b/libnm/nm-manager.c index 223bc15c72..f73ccf9372 100644 --- a/libnm/nm-manager.c +++ b/libnm/nm-manager.c @@ -52,7 +52,7 @@ G_DEFINE_TYPE_WITH_CODE (NMManager, nm_manager, NM_TYPE_OBJECT, #define NM_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_MANAGER, NMManagerPrivate)) typedef struct { - NMDBusManager *manager_proxy; + NMDBusManager *proxy; GCancellable *props_cancellable; char *version; NMState state; @@ -186,13 +186,13 @@ init_dbus (NMObject *object) NM_OBJECT_CLASS (nm_manager_parent_class)->init_dbus (object); - priv->manager_proxy = NMDBUS_MANAGER (_nm_object_get_proxy (object, NM_DBUS_INTERFACE)); + priv->proxy = NMDBUS_MANAGER (_nm_object_get_proxy (object, NM_DBUS_INTERFACE)); _nm_object_register_properties (object, NM_DBUS_INTERFACE, property_info); /* Permissions */ - g_signal_connect (priv->manager_proxy, "check-permissions", + g_signal_connect (priv->proxy, "check-permissions", G_CALLBACK (manager_recheck_permissions), object); } @@ -307,7 +307,7 @@ get_permissions_sync (NMManager *self, GError **error) NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self); GVariant *permissions; - if (nmdbus_manager_call_get_permissions_sync (priv->manager_proxy, + if (nmdbus_manager_call_get_permissions_sync (priv->proxy, &permissions, NULL, error)) { update_permissions (self, permissions); @@ -364,7 +364,7 @@ manager_recheck_permissions (NMDBusManager *proxy, gpointer user_data) return; priv->perm_call_cancellable = g_cancellable_new (); - nmdbus_manager_call_get_permissions (priv->manager_proxy, + nmdbus_manager_call_get_permissions (priv->proxy, priv->perm_call_cancellable, get_permissions_reply, self); @@ -409,7 +409,7 @@ nm_manager_networking_set_enabled (NMManager *manager, gboolean enable, GError * g_return_val_if_fail (NM_IS_MANAGER (manager), FALSE); - ret = nmdbus_manager_call_enable_sync (NM_MANAGER_GET_PRIVATE (manager)->manager_proxy, + ret = nmdbus_manager_call_enable_sync (NM_MANAGER_GET_PRIVATE (manager)->proxy, enable, NULL, error); if (error && *error) @@ -511,7 +511,7 @@ nm_manager_get_logging (NMManager *manager, char **level, char **domains, GError if (!level && !domains) return TRUE; - ret = nmdbus_manager_call_get_logging_sync (NM_MANAGER_GET_PRIVATE (manager)->manager_proxy, + ret = nmdbus_manager_call_get_logging_sync (NM_MANAGER_GET_PRIVATE (manager)->proxy, level, domains, NULL, error); if (error && *error) @@ -535,7 +535,7 @@ nm_manager_set_logging (NMManager *manager, const char *level, const char *domai if (!domains) domains = ""; - ret = nmdbus_manager_call_set_logging_sync (NM_MANAGER_GET_PRIVATE (manager)->manager_proxy, + ret = nmdbus_manager_call_set_logging_sync (NM_MANAGER_GET_PRIVATE (manager)->proxy, level, domains, NULL, error); if (error && *error) @@ -574,7 +574,7 @@ nm_manager_check_connectivity (NMManager *manager, g_return_val_if_fail (NM_IS_MANAGER (manager), NM_CONNECTIVITY_UNKNOWN); priv = NM_MANAGER_GET_PRIVATE (manager); - if (nmdbus_manager_call_check_connectivity_sync (priv->manager_proxy, + if (nmdbus_manager_call_check_connectivity_sync (priv->proxy, &connectivity, cancellable, error)) return connectivity; @@ -621,7 +621,7 @@ nm_manager_check_connectivity_async (NMManager *manager, simple = g_simple_async_result_new (G_OBJECT (manager), callback, user_data, nm_manager_check_connectivity_async); - nmdbus_manager_call_check_connectivity (priv->manager_proxy, + nmdbus_manager_call_check_connectivity (priv->proxy, cancellable, check_connectivity_cb, simple); } @@ -910,7 +910,7 @@ nm_manager_activate_connection_async (NMManager *manager, priv = NM_MANAGER_GET_PRIVATE (manager); priv->pending_activations = g_slist_prepend (priv->pending_activations, info); - nmdbus_manager_call_activate_connection (priv->manager_proxy, + nmdbus_manager_call_activate_connection (priv->proxy, connection ? nm_connection_get_path (connection) : "/", device ? nm_object_get_path (NM_OBJECT (device)) : "/", specific_object ? specific_object : "/", @@ -991,7 +991,7 @@ nm_manager_add_and_activate_connection_async (NMManager *manager, if (!dict) dict = g_variant_new_array (G_VARIANT_TYPE ("{sa{sv}}"), NULL, 0); - nmdbus_manager_call_add_and_activate_connection (priv->manager_proxy, + nmdbus_manager_call_add_and_activate_connection (priv->proxy, dict, nm_object_get_path (NM_OBJECT (device)), specific_object ? specific_object : "/", @@ -1072,7 +1072,7 @@ nm_manager_deactivate_connection (NMManager *manager, g_return_val_if_fail (NM_IS_ACTIVE_CONNECTION (active), FALSE); path = nm_object_get_path (NM_OBJECT (active)); - ret = nmdbus_manager_call_deactivate_connection_sync (NM_MANAGER_GET_PRIVATE (manager)->manager_proxy, + ret = nmdbus_manager_call_deactivate_connection_sync (NM_MANAGER_GET_PRIVATE (manager)->proxy, path, cancellable, error); if (error && *error) @@ -1116,7 +1116,7 @@ nm_manager_deactivate_connection_async (NMManager *manager, nm_manager_deactivate_connection_async); path = nm_object_get_path (NM_OBJECT (active)); - nmdbus_manager_call_deactivate_connection (NM_MANAGER_GET_PRIVATE (manager)->manager_proxy, + nmdbus_manager_call_deactivate_connection (NM_MANAGER_GET_PRIVATE (manager)->proxy, path, cancellable, deactivated_cb, simple); @@ -1231,7 +1231,7 @@ init_async_parent_inited (GObject *source, GAsyncResult *result, gpointer user_d return; } - nmdbus_manager_call_get_permissions (priv->manager_proxy, + nmdbus_manager_call_get_permissions (priv->proxy, init_data->cancellable, init_async_got_permissions, g_object_ref (init_data->manager)); @@ -1293,6 +1293,8 @@ dispose (GObject *object) g_clear_object (&priv->primary_connection); g_clear_object (&priv->activating_connection); + g_clear_object (&priv->proxy); + /* Each activation should hold a ref on @manager, so if we're being disposed, * there shouldn't be any pending. */ diff --git a/libnm/nm-object.c b/libnm/nm-object.c index aa226237d5..a5eccbdc34 100644 --- a/libnm/nm-object.c +++ b/libnm/nm-object.c @@ -928,6 +928,7 @@ _nm_object_register_properties (NMObject *object, proxy = _nm_object_get_proxy (object, interface); g_signal_connect (proxy, "g-properties-changed", G_CALLBACK (properties_changed), object); + g_object_unref (proxy); instance = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); priv->property_tables = g_slist_prepend (priv->property_tables, instance); @@ -957,6 +958,7 @@ _nm_object_set_property (NMObject *object, ...) { GVariant *val, *ret; + GDBusProxy *proxy; va_list ap; g_return_if_fail (NM_IS_OBJECT (object)); @@ -969,7 +971,8 @@ _nm_object_set_property (NMObject *object, va_end (ap); g_return_if_fail (val != NULL); - ret = g_dbus_proxy_call_sync (_nm_object_get_proxy (object, interface), + proxy = _nm_object_get_proxy (object, interface); + ret = g_dbus_proxy_call_sync (proxy, DBUS_INTERFACE_PROPERTIES ".Set", g_variant_new ("(ssv)", interface, prop_name, val), G_DBUS_CALL_FLAGS_NONE, 2000, @@ -977,6 +980,7 @@ _nm_object_set_property (NMObject *object, /* Ignore errors. */ if (ret) g_variant_unref (ret); + g_object_unref (proxy); } static void diff --git a/libnm/nm-remote-connection.c b/libnm/nm-remote-connection.c index d73f7764ef..2d8e44479c 100644 --- a/libnm/nm-remote-connection.c +++ b/libnm/nm-remote-connection.c @@ -768,6 +768,16 @@ constructed (GObject *object) } static void +dispose (GObject *object) +{ + NMRemoteConnectionPrivate *priv = NM_REMOTE_CONNECTION_GET_PRIVATE (object); + + g_clear_object (&priv->proxy); + + G_OBJECT_CLASS (nm_remote_connection_parent_class)->dispose (object); +} + +static void nm_remote_connection_class_init (NMRemoteConnectionClass *remote_class) { GObjectClass *object_class = G_OBJECT_CLASS (remote_class); @@ -778,6 +788,7 @@ nm_remote_connection_class_init (NMRemoteConnectionClass *remote_class) /* virtual methods */ object_class->constructed = constructed; object_class->get_property = get_property; + object_class->dispose = dispose; nm_object_class->init_dbus = init_dbus; diff --git a/libnm/nm-remote-settings.c b/libnm/nm-remote-settings.c index d8b275b835..cc76f1ff7d 100644 --- a/libnm/nm-remote-settings.c +++ b/libnm/nm-remote-settings.c @@ -620,7 +620,6 @@ init_dbus (NMObject *object) NM_OBJECT_CLASS (nm_remote_settings_parent_class)->init_dbus (object); - priv->proxy = NMDBUS_SETTINGS (_nm_object_get_proxy (object, NM_DBUS_INTERFACE_SETTINGS)); _nm_object_register_properties (object, NM_DBUS_INTERFACE_SETTINGS, property_info); diff --git a/libnm/nm-vpn-connection.c b/libnm/nm-vpn-connection.c index c7571d2926..97d02d41ff 100644 --- a/libnm/nm-vpn-connection.c +++ b/libnm/nm-vpn-connection.c @@ -144,6 +144,7 @@ init_dbus (NMObject *object) proxy = _nm_object_get_proxy (object, NM_DBUS_INTERFACE_VPN_CONNECTION); g_signal_connect (proxy, "vpn-state-changed", G_CALLBACK (vpn_state_changed_proxy), object); + g_object_unref (proxy); } static void |