diff --git a/libnm-util/nm-setting.c b/libnm-util/nm-setting.c index 6b5753afb2..b3db363b77 100644 --- a/libnm-util/nm-setting.c +++ b/libnm-util/nm-setting.c @@ -1165,6 +1165,30 @@ nm_setting_init (NMSetting *setting) { } +static GObject* +constructor (GType type, + guint n_construct_params, + GObjectConstructParam *construct_params) +{ + GObject *object; + NMSettingPrivate *priv; + + object = G_OBJECT_CLASS (nm_setting_parent_class)->constructor (type, + n_construct_params, + construct_params); + if (!object) + return NULL; + + priv = NM_SETTING_GET_PRIVATE (object); + if (!priv->name) { + g_warning ("Setting name is not set."); + g_object_unref (object); + object = NULL; + } + + return object; +} + static void finalize (GObject *object) { @@ -1183,9 +1207,8 @@ set_property (GObject *object, guint prop_id, switch (prop_id) { case PROP_NAME: - /* construct only */ + g_free (priv->name); priv->name = g_value_dup_string (value); - g_assert (priv->name && *priv->name); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -1217,6 +1240,7 @@ nm_setting_class_init (NMSettingClass *setting_class) g_type_class_add_private (setting_class, sizeof (NMSettingPrivate)); /* virtual methods */ + object_class->constructor = constructor; object_class->set_property = set_property; object_class->get_property = get_property; object_class->finalize = finalize; @@ -1245,6 +1269,6 @@ nm_setting_class_init (NMSettingClass *setting_class) "has been created. Each setting class has a name, and " "all objects of that class share the same name.", NULL, - G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + G_PARAM_READWRITE)); }