diff options
author | Thomas Haller <thaller@redhat.com> | 2013-12-11 14:33:49 +0100 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2014-01-15 17:01:53 +0100 |
commit | 0f382131294cae8dd8ff9b143ddbd110517759ee (patch) | |
tree | 5a4fc484bcdf3114bb1ce8613abb51ecaf85e71e /libnm-util/nm-connection.c | |
parent | f53f39847adda13a54a848538f8919d42f00f021 (diff) | |
download | NetworkManager-0f382131294cae8dd8ff9b143ddbd110517759ee.tar.gz |
libnm-util: raise CHANGED signal in nm_connection_clear_secrets only on change
Often, nm_connection_clear_secrets does have no consequences, because
there is nothing to be cleared. Only raise a signal, if something
actually changed.
Signed-off-by: Thomas Haller <thaller@redhat.com>
Diffstat (limited to 'libnm-util/nm-connection.c')
-rw-r--r-- | libnm-util/nm-connection.c | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/libnm-util/nm-connection.c b/libnm-util/nm-connection.c index 7a4e219cec..f62a2e9c55 100644 --- a/libnm-util/nm-connection.c +++ b/libnm-util/nm-connection.c @@ -841,15 +841,20 @@ nm_connection_clear_secrets (NMConnection *connection) { GHashTableIter iter; NMSetting *setting; + gboolean changed = FALSE; g_return_if_fail (NM_IS_CONNECTION (connection)); g_hash_table_iter_init (&iter, NM_CONNECTION_GET_PRIVATE (connection)->settings); - while (g_hash_table_iter_next (&iter, NULL, (gpointer) &setting)) - nm_setting_clear_secrets (setting); + while (g_hash_table_iter_next (&iter, NULL, (gpointer) &setting)) { + g_signal_handlers_block_by_func (setting, (GCallback) setting_changed_cb, connection); + changed |= _nm_setting_clear_secrets (setting); + g_signal_handlers_unblock_by_func (setting, (GCallback) setting_changed_cb, connection); + } g_signal_emit (connection, signals[SECRETS_CLEARED], 0); - g_signal_emit (connection, signals[CHANGED], 0); + if (changed) + g_signal_emit (connection, signals[CHANGED], 0); } /** @@ -868,15 +873,20 @@ nm_connection_clear_secrets_with_flags (NMConnection *connection, { GHashTableIter iter; NMSetting *setting; + gboolean changed = FALSE; g_return_if_fail (NM_IS_CONNECTION (connection)); g_hash_table_iter_init (&iter, NM_CONNECTION_GET_PRIVATE (connection)->settings); - while (g_hash_table_iter_next (&iter, NULL, (gpointer) &setting)) - nm_setting_clear_secrets_with_flags (setting, func, user_data); + while (g_hash_table_iter_next (&iter, NULL, (gpointer) &setting)) { + g_signal_handlers_block_by_func (setting, (GCallback) setting_changed_cb, connection); + changed |= _nm_setting_clear_secrets_with_flags (setting, func, user_data); + g_signal_handlers_unblock_by_func (setting, (GCallback) setting_changed_cb, connection); + } g_signal_emit (connection, signals[SECRETS_CLEARED], 0); - g_signal_emit (connection, signals[CHANGED], 0); + if (changed) + g_signal_emit (connection, signals[CHANGED], 0); } /** |