From 64f53cc900f42acf59bd63aeb7339c7d597a7831 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Mon, 14 Jan 2019 20:51:55 +0100 Subject: libnm: minor cleanup releasing setting from NMConnection There are two callers that are concerned with disconnecting/releasing a setting: - _setting_release_hfr() (formerly _setting_release()) - _nm_connection_add_setting() for the @s_old setting Compared to one caller that connects/adds a setting (_nm_connection_add_setting()). Refactor the two callers to use the same helper function (_setting_release()) so that the implementation of how to release a setting is at one place. This patch was originally done when adding another signal to NMSetting. That did not happen (yet), but the refactoring still makes sense. --- libnm-core/nm-connection.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/libnm-core/nm-connection.c b/libnm-core/nm-connection.c index 13d687e4d7..724e8557b8 100644 --- a/libnm-core/nm-connection.c +++ b/libnm-core/nm-connection.c @@ -102,10 +102,16 @@ setting_changed_cb (NMSetting *setting, g_signal_emit (self, signals[CHANGED], 0); } +static void +_setting_release (NMConnection *connection, NMSetting *setting) +{ + g_signal_handlers_disconnect_by_func (setting, setting_changed_cb, connection); +} + static gboolean -_setting_release (gpointer key, gpointer value, gpointer user_data) +_setting_release_hfr (gpointer key, gpointer value, gpointer user_data) { - g_signal_handlers_disconnect_by_func (value, setting_changed_cb, user_data); + _setting_release (user_data, value); return TRUE; } @@ -123,9 +129,10 @@ _nm_connection_add_setting (NMConnection *connection, NMSetting *setting) setting_type = G_OBJECT_TYPE (setting); if ((s_old = g_hash_table_lookup (priv->settings, _gtype_to_hash_key (setting_type)))) - g_signal_handlers_disconnect_by_func (s_old, setting_changed_cb, connection); + _setting_release (connection, s_old); + g_hash_table_insert (priv->settings, _gtype_to_hash_key (setting_type), setting); - /* Listen for property changes so we can emit the 'changed' signal */ + g_signal_connect (setting, "notify", (GCallback) setting_changed_cb, connection); } @@ -409,7 +416,7 @@ _nm_connection_replace_settings (NMConnection *connection, } if (g_hash_table_size (priv->settings) > 0) { - g_hash_table_foreach_remove (priv->settings, _setting_release, connection); + g_hash_table_foreach_remove (priv->settings, _setting_release_hfr, connection); changed = TRUE; } else changed = (settings != NULL); @@ -494,7 +501,7 @@ nm_connection_replace_settings_from_connection (NMConnection *connection, new_priv = NM_CONNECTION_GET_PRIVATE (new_connection); if ((changed = g_hash_table_size (priv->settings) > 0)) - g_hash_table_foreach_remove (priv->settings, _setting_release, connection); + g_hash_table_foreach_remove (priv->settings, _setting_release_hfr, connection); if (g_hash_table_size (new_priv->settings)) { g_hash_table_iter_init (&iter, new_priv->settings); @@ -523,7 +530,7 @@ nm_connection_clear_settings (NMConnection *connection) priv = NM_CONNECTION_GET_PRIVATE (connection); if (g_hash_table_size (priv->settings) > 0) { - g_hash_table_foreach_remove (priv->settings, _setting_release, connection); + g_hash_table_foreach_remove (priv->settings, _setting_release_hfr, connection); g_signal_emit (connection, signals[CHANGED], 0); } } @@ -2961,7 +2968,7 @@ nm_connection_private_free (NMConnectionPrivate *priv) { NMConnection *self = priv->self; - g_hash_table_foreach_remove (priv->settings, _setting_release, self); + g_hash_table_foreach_remove (priv->settings, _setting_release_hfr, self); g_hash_table_destroy (priv->settings); g_free (priv->path); -- cgit v1.2.1