settings: don't implement settings plugins as singletons

The settings plugins are created by NMSettings when the plugin
gets loaded. There is no need for these instances to be singletons
or to have a singleton getter.

Also, while in practice we create a settings plugin instance of
each type only once, there is nothing that would prevent creating
multiple instances. Hence, having a singleton getter is not right.

What is however useful, is to track them and block shutdown
via nm_shutdown_wait_obj_register*(). While the actual waiting
is not yet implemented, we should mark the plugin instances to
block shutdown (in the future).
This commit is contained in:
Thomas Haller
2019-06-19 20:29:17 +02:00
parent a410873461
commit eed4b5253f
4 changed files with 8 additions and 13 deletions

View File

@@ -126,6 +126,8 @@ static void
_nm_singleton_instance_weak_cb (gpointer data, _nm_singleton_instance_weak_cb (gpointer data,
GObject *where_the_object_was) GObject *where_the_object_was)
{ {
nm_assert (g_slist_find (_singletons, where_the_object_was));
_singletons = g_slist_remove (_singletons, where_the_object_was); _singletons = g_slist_remove (_singletons, where_the_object_was);
} }

View File

@@ -1255,6 +1255,10 @@ add_plugin (NMSettings *self,
priv->plugins = g_slist_append (priv->plugins, g_object_ref (plugin)); priv->plugins = g_slist_append (priv->plugins, g_object_ref (plugin));
nm_shutdown_wait_obj_register_full (G_OBJECT (plugin),
g_strdup_printf ("%s-settings-plugin", pname),
TRUE);
_LOGI ("Loaded settings plugin: %s (%s%s%s)", _LOGI ("Loaded settings plugin: %s (%s%s%s)",
pname, pname,
NM_PRINT_FMT_QUOTED (path, "\"", path, "\"", "internal")); NM_PRINT_FMT_QUOTED (path, "\"", path, "\"", "internal"));

View File

@@ -79,12 +79,6 @@ G_DEFINE_TYPE (SettingsPluginIfcfg, settings_plugin_ifcfg, NM_TYPE_SETTINGS_PLUG
/*****************************************************************************/ /*****************************************************************************/
static SettingsPluginIfcfg *settings_plugin_ifcfg_get (void);
NM_DEFINE_SINGLETON_GETTER (SettingsPluginIfcfg, settings_plugin_ifcfg_get, SETTINGS_TYPE_PLUGIN_IFCFG);
/*****************************************************************************/
#define _NMLOG_DOMAIN LOGD_SETTINGS #define _NMLOG_DOMAIN LOGD_SETTINGS
#define _NMLOG(level, ...) \ #define _NMLOG(level, ...) \
G_STMT_START { \ G_STMT_START { \
@@ -984,5 +978,5 @@ settings_plugin_ifcfg_class_init (SettingsPluginIfcfgClass *klass)
G_MODULE_EXPORT NMSettingsPlugin * G_MODULE_EXPORT NMSettingsPlugin *
nm_settings_plugin_factory (void) nm_settings_plugin_factory (void)
{ {
return NM_SETTINGS_PLUGIN (g_object_ref (settings_plugin_ifcfg_get ())); return g_object_new (SETTINGS_TYPE_PLUGIN_IFCFG, NULL);
} }

View File

@@ -75,11 +75,6 @@ G_DEFINE_TYPE (SettingsPluginIfupdown, settings_plugin_ifupdown, NM_TYPE_SETTING
/*****************************************************************************/ /*****************************************************************************/
static SettingsPluginIfupdown *settings_plugin_ifupdown_get (void);
NM_DEFINE_SINGLETON_GETTER (SettingsPluginIfupdown, settings_plugin_ifupdown_get, SETTINGS_TYPE_PLUGIN_IFUPDOWN);
/*****************************************************************************/
#define _NMLOG_PREFIX_NAME "ifupdown" #define _NMLOG_PREFIX_NAME "ifupdown"
#define _NMLOG_DOMAIN LOGD_SETTINGS #define _NMLOG_DOMAIN LOGD_SETTINGS
#define _NMLOG(level, ...) \ #define _NMLOG(level, ...) \
@@ -339,5 +334,5 @@ settings_plugin_ifupdown_class_init (SettingsPluginIfupdownClass *klass)
G_MODULE_EXPORT NMSettingsPlugin * G_MODULE_EXPORT NMSettingsPlugin *
nm_settings_plugin_factory (void) nm_settings_plugin_factory (void)
{ {
return NM_SETTINGS_PLUGIN (g_object_ref (settings_plugin_ifupdown_get ())); return g_object_new (SETTINGS_TYPE_PLUGIN_IFUPDOWN, NULL);
} }