diff options
author | Thomas Haller <thaller@redhat.com> | 2015-01-21 12:58:32 +0100 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2015-02-03 13:01:54 +0100 |
commit | 5b47462f32489c726d6f79dfed431864d31f8dd2 (patch) | |
tree | 52117994ae95d4c33999f2d45312915e73037c28 | |
parent | cc46b182ed779110f93b5df19f2f9d43dc476d1e (diff) | |
download | NetworkManager-th/rh1066697_reload_config.tar.gz |
config: use flags argument in config-changed signal instead of a hash tableth/rh1066697_reload_config
-rw-r--r-- | src/nm-config-data.c | 22 | ||||
-rw-r--r-- | src/nm-config-data.h | 13 | ||||
-rw-r--r-- | src/nm-config.c | 64 | ||||
-rw-r--r-- | src/nm-config.h | 7 | ||||
-rw-r--r-- | src/nm-manager.c | 2 |
5 files changed, 66 insertions, 42 deletions
diff --git a/src/nm-config-data.c b/src/nm-config-data.c index cf140739fc..f1a7bcfc62 100644 --- a/src/nm-config-data.c +++ b/src/nm-config-data.c @@ -157,33 +157,31 @@ _keyfile_a_contains_all_in_b (GKeyFile *kf_a, GKeyFile *kf_b) return TRUE; } -GHashTable * +NMConfigChangeFlags nm_config_data_diff (NMConfigData *old_data, NMConfigData *new_data) { - GHashTable *changes; + NMConfigChangeFlags changes = NM_CONFIG_CHANGE_NONE; NMConfigDataPrivate *priv_old, *priv_new; GSList *spec_old, *spec_new; - g_return_val_if_fail (NM_IS_CONFIG_DATA (old_data), NULL); - g_return_val_if_fail (NM_IS_CONFIG_DATA (new_data), NULL); - - changes = g_hash_table_new (g_str_hash, g_str_equal); + g_return_val_if_fail (NM_IS_CONFIG_DATA (old_data), NM_CONFIG_CHANGE_NONE); + g_return_val_if_fail (NM_IS_CONFIG_DATA (new_data), NM_CONFIG_CHANGE_NONE); priv_old = NM_CONFIG_DATA_GET_PRIVATE (old_data); priv_new = NM_CONFIG_DATA_GET_PRIVATE (new_data); if ( !_keyfile_a_contains_all_in_b (priv_old->keyfile, priv_new->keyfile) || !_keyfile_a_contains_all_in_b (priv_new->keyfile, priv_old->keyfile)) - g_hash_table_insert (changes, NM_CONFIG_CHANGES_VALUES, NULL); + changes |= NM_CONFIG_CHANGE_VALUES; if ( g_strcmp0 (nm_config_data_get_config_main_file (old_data), nm_config_data_get_config_main_file (new_data)) != 0 || g_strcmp0 (nm_config_data_get_config_description (old_data), nm_config_data_get_config_description (new_data)) != 0) - g_hash_table_insert (changes, NM_CONFIG_CHANGES_CONFIG_FILES, NULL); + changes |= NM_CONFIG_CHANGE_CONFIG_FILES; if ( nm_config_data_get_connectivity_interval (old_data) != nm_config_data_get_connectivity_interval (new_data) || g_strcmp0 (nm_config_data_get_connectivity_uri (old_data), nm_config_data_get_connectivity_uri (new_data)) || g_strcmp0 (nm_config_data_get_connectivity_response (old_data), nm_config_data_get_connectivity_response (new_data))) - g_hash_table_insert (changes, NM_CONFIG_CHANGES_CONNECTIVITY, NULL); + changes |= NM_CONFIG_CHANGE_CONNECTIVITY; spec_old = priv_old->no_auto_default.specs; spec_new = priv_new->no_auto_default.specs; @@ -192,12 +190,8 @@ nm_config_data_diff (NMConfigData *old_data, NMConfigData *new_data) spec_new = spec_new->next; } if (spec_old || spec_new) - g_hash_table_insert (changes, NM_CONFIG_CHANGES_NO_AUTO_DEFAULT, NULL); + changes |= NM_CONFIG_CHANGE_NO_AUTO_DEFAULT; - if (!g_hash_table_size (changes)) { - g_hash_table_destroy (changes); - return NULL; - } return changes; } diff --git a/src/nm-config-data.h b/src/nm-config-data.h index 59b2806ccd..bb88bf7ea2 100644 --- a/src/nm-config-data.h +++ b/src/nm-config-data.h @@ -44,6 +44,17 @@ G_BEGIN_DECLS #define NM_CONFIG_DATA_CONNECTIVITY_RESPONSE "connectivity-response" #define NM_CONFIG_DATA_NO_AUTO_DEFAULT "no-auto-default" +typedef enum { /*< flags >*/ + NM_CONFIG_CHANGE_NONE = 0, + NM_CONFIG_CHANGE_CONFIG_FILES = (1L << 0), + NM_CONFIG_CHANGE_VALUES = (1L << 1), + NM_CONFIG_CHANGE_CONNECTIVITY = (1L << 2), + NM_CONFIG_CHANGE_NO_AUTO_DEFAULT = (1L << 3), + + _NM_CONFIG_CHANGE_LAST, + NM_CONFIG_CHANGE_ALL = ((_NM_CONFIG_CHANGE_LAST - 1) << 1) - 1, +} NMConfigChangeFlags; + struct _NMConfigData { GObject parent; }; @@ -60,7 +71,7 @@ NMConfigData *nm_config_data_new (const char *config_main_file, GKeyFile *keyfile); NMConfigData *nm_config_data_new_update_no_auto_default (const NMConfigData *base, const char *const*no_auto_default); -GHashTable *nm_config_data_diff (NMConfigData *old_data, NMConfigData *new_data); +NMConfigChangeFlags nm_config_data_diff (NMConfigData *old_data, NMConfigData *new_data); const char *nm_config_data_get_config_main_file (const NMConfigData *config_data); const char *nm_config_data_get_config_description (const NMConfigData *config_data); diff --git a/src/nm-config.c b/src/nm-config.c index a325b4c86a..03fca56b73 100644 --- a/src/nm-config.c +++ b/src/nm-config.c @@ -30,6 +30,8 @@ #include "nm-glib-compat.h" #include "nm-device.h" #include "NetworkManagerUtils.h" +#include "gsystem-local-alloc.h" +#include "nm-enum-types.h" #include <gio/gio.h> #include <glib/gi18n.h> @@ -716,40 +718,60 @@ nm_config_reload (NMConfig *self) _set_config_data (self, new_data); } +static const char * +_change_flags_one_to_string (NMConfigChangeFlags flag) +{ + switch (flag) { + case NM_CONFIG_CHANGE_CONFIG_FILES: + return "config-files"; + case NM_CONFIG_CHANGE_VALUES: + return "values"; + case NM_CONFIG_CHANGE_CONNECTIVITY: + return "connectivity"; + case NM_CONFIG_CHANGE_NO_AUTO_DEFAULT: + return "no-auto-default"; + default: + g_return_val_if_reached ("unknown"); + } +} + +char * +nm_config_change_flags_to_string (NMConfigChangeFlags flags) +{ + GString *str = g_string_new (""); + NMConfigChangeFlags s = 0x01; + + while (flags) { + if (NM_FLAGS_HAS (flags, s)) { + if (str->len) + g_string_append_c (str, ','); + g_string_append (str, _change_flags_one_to_string (s)); + } + flags = flags & ~s; + s <<= 1; + } + return g_string_free (str, FALSE); +} + static void _set_config_data (NMConfig *self, NMConfigData *new_data) { NMConfigPrivate *priv = NM_CONFIG_GET_PRIVATE (self); NMConfigData *old_data = priv->config_data; - GHashTable *changes; + NMConfigChangeFlags changes; + gs_free char *log_str = NULL; changes = nm_config_data_diff (old_data, new_data); - - if (!changes) { + if (changes == NM_CONFIG_CHANGE_NONE) { g_object_unref (new_data); return; } - if (nm_logging_enabled (LOGL_INFO, LOGD_CORE)) { - GString *str = g_string_new (NULL); - GHashTableIter iter; - const char *key; - - g_hash_table_iter_init (&iter, changes); - while (g_hash_table_iter_next (&iter, (gpointer) &key, NULL)) { - if (str->len) - g_string_append (str, ","); - g_string_append (str, key); - } - nm_log_info (LOGD_CORE, "config: update %s (%s)", nm_config_data_get_config_description (new_data), str->str); - g_string_free (str, TRUE); - } - + nm_log_info (LOGD_CORE, "config: update %s (%s)", nm_config_data_get_config_description (new_data), + (log_str = nm_config_change_flags_to_string (changes))); priv->config_data = new_data; g_signal_emit (self, signals[SIGNAL_CONFIG_CHANGED], 0, new_data, changes, old_data); g_object_unref (old_data); - - g_hash_table_destroy (changes); } NM_DEFINE_SINGLETON_DESTRUCTOR (NMConfig); @@ -934,7 +956,7 @@ nm_config_class_init (NMConfigClass *config_class) G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET (NMConfigClass, config_changed), NULL, NULL, NULL, - G_TYPE_NONE, 3, NM_TYPE_CONFIG_DATA, G_TYPE_HASH_TABLE, NM_TYPE_CONFIG_DATA); + G_TYPE_NONE, 3, NM_TYPE_CONFIG_DATA, NM_TYPE_CONFIG_CHANGE_FLAGS, NM_TYPE_CONFIG_DATA); } static void diff --git a/src/nm-config.h b/src/nm-config.h index b52a6b58f8..530cbade98 100644 --- a/src/nm-config.h +++ b/src/nm-config.h @@ -43,11 +43,6 @@ G_BEGIN_DECLS /* Signals */ #define NM_CONFIG_SIGNAL_CONFIG_CHANGED "config-changed" -#define NM_CONFIG_CHANGES_CONFIG_FILES "config-files" -#define NM_CONFIG_CHANGES_VALUES "values" -#define NM_CONFIG_CHANGES_CONNECTIVITY "connectivity" -#define NM_CONFIG_CHANGES_NO_AUTO_DEFAULT "no-auto-default" - typedef struct NMConfigCmdLineOptions NMConfigCmdLineOptions; struct _NMConfig { @@ -65,6 +60,8 @@ GType nm_config_get_type (void); NMConfig *nm_config_get (void); +char *nm_config_change_flags_to_string (NMConfigChangeFlags flags); + NMConfigData *nm_config_get_data (NMConfig *config); NMConfigData *nm_config_get_data_orig (NMConfig *config); const char **nm_config_get_plugins (NMConfig *config); diff --git a/src/nm-manager.c b/src/nm-manager.c index ad76da7c4d..d16a912880 100644 --- a/src/nm-manager.c +++ b/src/nm-manager.c @@ -465,7 +465,7 @@ active_connection_get_by_path (NMManager *manager, const char *path) /************************************************************************/ static void -_config_changed_cb (NMConfig *config, NMConfigData *config_data, GHashTable *changes, NMConfigData *old_data, NMManager *self) +_config_changed_cb (NMConfig *config, NMConfigData *config_data, NMConfigChangeFlags changes, NMConfigData *old_data, NMManager *self) { g_object_set (NM_MANAGER_GET_PRIVATE (self)->connectivity, NM_CONNECTIVITY_URI, nm_config_data_get_connectivity_uri (config_data), |