settings/ifupdown: minor cleanup of auto-ifaces in plugin's initialize()
- use gs_unref_hashtable for managing lifetime - only allocate the hashtable if necessary, and use g_hash_table_add() which is optimized by HashTable. - actually copy the block->name that is used as key. While not necessary at the moment, it is very ugly how ifparser_getfirst() returns static data. Optimally, this would be fixed and we create and destroy the parser results. Hence, ensure the lifetime of the key.
This commit is contained in:
@@ -307,7 +307,7 @@ initialize (NMSettingsPlugin *config)
|
|||||||
{
|
{
|
||||||
SettingsPluginIfupdown *self = SETTINGS_PLUGIN_IFUPDOWN (config);
|
SettingsPluginIfupdown *self = SETTINGS_PLUGIN_IFUPDOWN (config);
|
||||||
SettingsPluginIfupdownPrivate *priv = SETTINGS_PLUGIN_IFUPDOWN_GET_PRIVATE (self);
|
SettingsPluginIfupdownPrivate *priv = SETTINGS_PLUGIN_IFUPDOWN_GET_PRIVATE (self);
|
||||||
GHashTable *auto_ifaces;
|
gs_unref_hashtable GHashTable *auto_ifaces = NULL;
|
||||||
if_block *block = NULL;
|
if_block *block = NULL;
|
||||||
struct udev_enumerate *enumerate;
|
struct udev_enumerate *enumerate;
|
||||||
struct udev_list_entry *keys;
|
struct udev_list_entry *keys;
|
||||||
@@ -315,8 +315,6 @@ initialize (NMSettingsPlugin *config)
|
|||||||
const char *block_name;
|
const char *block_name;
|
||||||
NMIfupdownConnection *connection;
|
NMIfupdownConnection *connection;
|
||||||
|
|
||||||
auto_ifaces = g_hash_table_new (nm_str_hash, g_str_equal);
|
|
||||||
|
|
||||||
nm_log_info (LOGD_SETTINGS, "init!");
|
nm_log_info (LOGD_SETTINGS, "init!");
|
||||||
|
|
||||||
priv->udev_client = nm_udev_client_new ((const char *[]) { "net", NULL },
|
priv->udev_client = nm_udev_client_new ((const char *[]) { "net", NULL },
|
||||||
@@ -326,9 +324,11 @@ initialize (NMSettingsPlugin *config)
|
|||||||
ifparser_init (ENI_INTERFACES_FILE, 0);
|
ifparser_init (ENI_INTERFACES_FILE, 0);
|
||||||
block = ifparser_getfirst ();
|
block = ifparser_getfirst ();
|
||||||
while (block) {
|
while (block) {
|
||||||
if(!strcmp ("auto", block->type) || !strcmp ("allow-hotplug", block->type))
|
if(!strcmp ("auto", block->type) || !strcmp ("allow-hotplug", block->type)) {
|
||||||
g_hash_table_insert (auto_ifaces, block->name, GUINT_TO_POINTER (1));
|
if (!auto_ifaces)
|
||||||
else if (!strcmp ("iface", block->type)) {
|
auto_ifaces = g_hash_table_new_full (nm_str_hash, g_str_equal, g_free, NULL);
|
||||||
|
g_hash_table_add (auto_ifaces, g_strdup (block->name));
|
||||||
|
} else if (!strcmp ("iface", block->type)) {
|
||||||
NMIfupdownConnection *exported;
|
NMIfupdownConnection *exported;
|
||||||
|
|
||||||
/* Bridge configuration */
|
/* Bridge configuration */
|
||||||
@@ -405,14 +405,15 @@ initialize (NMSettingsPlugin *config)
|
|||||||
while (g_hash_table_iter_next (&con_iter, (gpointer) &block_name, (gpointer) &connection)) {
|
while (g_hash_table_iter_next (&con_iter, (gpointer) &block_name, (gpointer) &connection)) {
|
||||||
NMSettingConnection *setting;
|
NMSettingConnection *setting;
|
||||||
|
|
||||||
if (g_hash_table_lookup (auto_ifaces, block_name)) {
|
if ( !auto_ifaces
|
||||||
|
|| !g_hash_table_contains (auto_ifaces, block_name))
|
||||||
|
continue;
|
||||||
|
|
||||||
/* FIXME(copy-on-write-connection): avoid modifying NMConnection instances and share them via copy-on-write. */
|
/* FIXME(copy-on-write-connection): avoid modifying NMConnection instances and share them via copy-on-write. */
|
||||||
setting = nm_connection_get_setting_connection (nm_settings_connection_get_connection (NM_SETTINGS_CONNECTION (connection)));
|
setting = nm_connection_get_setting_connection (nm_settings_connection_get_connection (NM_SETTINGS_CONNECTION (connection)));
|
||||||
g_object_set (setting, NM_SETTING_CONNECTION_AUTOCONNECT, TRUE, NULL);
|
g_object_set (setting, NM_SETTING_CONNECTION_AUTOCONNECT, TRUE, NULL);
|
||||||
nm_log_info (LOGD_SETTINGS, "autoconnect");
|
nm_log_info (LOGD_SETTINGS, "autoconnect");
|
||||||
}
|
}
|
||||||
}
|
|
||||||
g_hash_table_destroy (auto_ifaces);
|
|
||||||
|
|
||||||
/* Check the config file to find out whether to manage interfaces */
|
/* Check the config file to find out whether to manage interfaces */
|
||||||
priv->unmanage_well_known = !nm_config_data_get_value_boolean (NM_CONFIG_GET_DATA_ORIG,
|
priv->unmanage_well_known = !nm_config_data_get_value_boolean (NM_CONFIG_GET_DATA_ORIG,
|
||||||
|
Reference in New Issue
Block a user