diff --git a/ChangeLog b/ChangeLog index 911604b5ef..060739a7fb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2004-08-17 Thomas Vander Stichele + + patch by: Luca Ognibene + + * gst/gstcaps.c: + * gst/gstelement.c: + * gst/gstpad.c: + * gst/gstxml.c: + fix memleaks. Fixes #150001 + 2004-08-17 Benjamin Otte * docs/random/ds/0.9-suggested-changes: diff --git a/gst/gstcaps.c b/gst/gstcaps.c index a660caa4f4..a7d29f39c2 100644 --- a/gst/gstcaps.c +++ b/gst/gstcaps.c @@ -976,8 +976,10 @@ gst_caps_subtract (const GstCaps * minuend, const GstCaps * subtrahend) gst_caps_append_structure (dest, gst_structure_copy (min)); } } - if (gst_caps_is_empty (dest)) + if (gst_caps_is_empty (dest)) { + gst_caps_free (src); return dest; + } } gst_caps_free (src); diff --git a/gst/gstelement.c b/gst/gstelement.c index b4938ffd28..8defdd7c9c 100644 --- a/gst/gstelement.c +++ b/gst/gstelement.c @@ -3220,6 +3220,8 @@ gst_element_restore_thyself (GstObject * object, xmlNodePtr self) /* FIXME: can this just be g_object_set ? */ gst_util_set_object_arg (G_OBJECT (element), name, value); /* g_object_set (G_OBJECT (element), name, value, NULL); */ + g_free (name); + g_free (value); } children = children->next; } diff --git a/gst/gstpad.c b/gst/gstpad.c index d5badb3bc2..bacf31fd5a 100644 --- a/gst/gstpad.c +++ b/gst/gstpad.c @@ -3002,11 +3002,13 @@ gst_pad_load_and_link (xmlNodePtr self, GstObject * parent) gchar **split; GstElement *target; GstObject *grandparent; + gchar *name = NULL; while (field) { if (!strcmp (field->name, "name")) { - pad = gst_element_get_pad (GST_ELEMENT (parent), - xmlNodeGetContent (field)); + name = xmlNodeGetContent (field); + pad = gst_element_get_pad (GST_ELEMENT (parent), name); + g_free (name); } else if (!strcmp (field->name, "peer")) { peer = xmlNodeGetContent (field); } @@ -3023,8 +3025,11 @@ gst_pad_load_and_link (xmlNodePtr self, GstObject * parent) GST_CAT_DEBUG (GST_CAT_XML, "Could not parse peer '%s' for pad %s:%s, leaving unlinked", peer, GST_DEBUG_PAD_NAME (pad)); + + g_free (peer); return; } + g_free (peer); g_return_if_fail (split[0] != NULL); g_return_if_fail (split[1] != NULL); diff --git a/gst/gstxml.c b/gst/gstxml.c index e97730417e..46d41c1271 100644 --- a/gst/gstxml.c +++ b/gst/gstxml.c @@ -415,6 +415,9 @@ gst_xml_make_element (xmlNodePtr cur, GstObject * parent) g_return_val_if_fail (element != NULL, NULL); + g_free (type); + g_free (name); + /* ne need to set the parent on this object bacause the pads */ /* will go through the hierarchy to link to their peers */ if (parent)