From 26d06184a326af2c331ae3c437624ac913ddd8e2 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Tue, 26 Apr 2005 02:01:52 +0000 Subject: [PATCH] gst/: make the name property a construct property, so objects always have a proper name. Original commit message from CVS: * gst/gstelementfactory.c: (gst_element_factory_create): * gst/gstobject.c: (gst_object_class_init): make the name property a construct property, so objects always have a proper name. * gst/gstobject.c: (gst_object_set_name_default), (gst_object_set_name): fix potential doublefree when resetting a name to its default value --- ChangeLog | 10 ++++++++++ gst/gstelementfactory.c | 4 +--- gst/gstobject.c | 7 ++++--- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index 69166290bc..91ddb52022 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2005-04-26 Benjamin Otte + + * gst/gstelementfactory.c: (gst_element_factory_create): + * gst/gstobject.c: (gst_object_class_init): + make the name property a construct property, so objects always have + a proper name. + * gst/gstobject.c: (gst_object_set_name_default), + (gst_object_set_name): + fix potential doublefree when resetting a name to its default value + 2005-04-25 Ronald S. Bultje * tests/sched/runxml.c: (main): diff --git a/gst/gstelementfactory.c b/gst/gstelementfactory.c index 72d2d9df93..d196bd8bc0 100644 --- a/gst/gstelementfactory.c +++ b/gst/gstelementfactory.c @@ -324,13 +324,11 @@ gst_element_factory_create (GstElementFactory * factory, const gchar * name) oclass->elementfactory = factory; /* create an instance of the element */ - element = GST_ELEMENT (g_object_new (factory->type, NULL)); + element = GST_ELEMENT (g_object_new (factory->type, "name", name, NULL)); g_assert (element != NULL); g_type_class_unref (oclass); - gst_object_set_name (GST_OBJECT (element), name); - return element; } diff --git a/gst/gstobject.c b/gst/gstobject.c index 62396d7cd9..363e15f248 100644 --- a/gst/gstobject.c +++ b/gst/gstobject.c @@ -135,7 +135,7 @@ gst_object_class_init (GstObjectClass * klass) g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_NAME, g_param_spec_string ("name", "Name", "The name of the object", - NULL, G_PARAM_READWRITE)); + NULL, G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); gst_object_signals[PARENT_SET] = g_signal_new ("parent-set", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, @@ -463,8 +463,7 @@ gst_object_set_name_default (GstObject * object) name = g_ascii_strdown (tmp, strlen (tmp)); g_free (tmp); - gst_object_set_name (object, name); - g_free (name); + object->name = name; } /** @@ -488,6 +487,8 @@ gst_object_set_name (GstObject * object, const gchar * name) object->name = g_strdup (name); else gst_object_set_name_default (object); + + g_object_notify (G_OBJECT (object), "name"); } /**