summaryrefslogtreecommitdiff
path: root/libnm-util/nm-connection.c
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2013-12-11 14:33:49 +0100
committerThomas Haller <thaller@redhat.com>2014-01-15 17:01:53 +0100
commit0f382131294cae8dd8ff9b143ddbd110517759ee (patch)
tree5a4fc484bcdf3114bb1ce8613abb51ecaf85e71e /libnm-util/nm-connection.c
parentf53f39847adda13a54a848538f8919d42f00f021 (diff)
downloadNetworkManager-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.c22
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);
}
/**