+2006-08-21 Tim-Philipp Müller <tim at centricular dot net>
+
+ * gst/gstxml.c: (gst_xml_dispose), (gst_xml_parse_file),
+ (gst_xml_parse_memory), (gst_xml_get_element):
+ Chain up to parent class in dispose function and also
+ unref the elements in the toplevel_elements GList.
+ Don't leak XmlDocPtr in _parse_file() and _parse_memory().
+ Always return a reference in gst_xml_get_element() rather
+ than only sometimes.
+
+ * tools/gst-launch.c: (xmllaunch_parse_cmdline):
+ Don't leak GstXml object.
+
2006-08-21 Stefan Kost <ensonic@users.sf.net>
* docs/gst/gstreamer-sections.txt:
static void
gst_xml_dispose (GObject * object)
{
- g_list_free (GST_XML (object)->topelements);
+ GstXML *xml = GST_XML (object);
+
+ g_list_foreach (xml->topelements, (GFunc) gst_object_unref, NULL);
+ g_list_free (xml->topelements);
+ xml->topelements = NULL;
+
+ G_OBJECT_CLASS (parent_class)->dispose (object);
}
/**
gst_xml_parse_file (GstXML * xml, const guchar * fname, const guchar * root)
{
xmlDocPtr doc;
+ gboolean ret;
g_return_val_if_fail (fname != NULL, FALSE);
return FALSE;
}
- return gst_xml_parse_doc (xml, doc, root);
+ ret = gst_xml_parse_doc (xml, doc, root);
+
+ xmlFreeDoc (doc);
+ return ret;
}
/* FIXME 0.9: guchar* */
const gchar * root)
{
xmlDocPtr doc;
+ gboolean ret;
g_return_val_if_fail (buffer != NULL, FALSE);
doc = xmlParseMemory ((char *) buffer, size);
- return gst_xml_parse_doc (xml, doc, (const xmlChar *) root);
+ ret = gst_xml_parse_doc (xml, doc, (const xmlChar *) root);
+
+ xmlFreeDoc (doc);
+ return ret;
}
static void
return xml->topelements;
}
-/* FIXME 0.9: why is the arg guchar* instead of gchar*? */
+/* FIXME 0.11: why is the arg guchar* instead of gchar*? */
/**
* gst_xml_get_element:
* @xml: The GstXML to get the element from
* to name in the pipeline description. You would use this if you have
* to do anything to the element after loading.
*
- * Returns: a pointer to a new GstElement
+ * Returns: a pointer to a new GstElement, caller owns returned reference.
*/
GstElement *
gst_xml_get_element (GstXML * xml, const guchar * name)
GST_DEBUG ("gstxml: getting element \"%s\"", name);
if (!strcmp (GST_ELEMENT_NAME (top), (char *) name)) {
- return top;
+ return GST_ELEMENT_CAST (gst_object_ref (top));
} else {
if (GST_IS_BIN (top)) {
element = gst_bin_get_by_name (GST_BIN (top), (gchar *) name);