summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim-Philipp Müller <tim.muller@collabora.co.uk>2013-07-16 18:30:50 +0100
committerTim-Philipp Müller <tim.muller@collabora.co.uk>2013-07-16 19:06:23 +0100
commit1e83a527a5907398ab056a414dc9d772c98f5c02 (patch)
tree94866c1758fa2dba61d3531ffb7afd61d1e4c86a
parent1456511b79098524b638a2777467b1956a76687b (diff)
subparse: don't leak parse context for sami and qttext
In gst_sub_parse_dispose() parser_type will be UNKNOWN, so these deinit calls were never executed. And we should clean up the parser state in the downwards state change anyway.
-rw-r--r--gst/subparse/gstsubparse.c16
-rw-r--r--gst/subparse/samiparse.c6
2 files changed, 8 insertions, 14 deletions
diff --git a/gst/subparse/gstsubparse.c b/gst/subparse/gstsubparse.c
index b93375c85..3998616d9 100644
--- a/gst/subparse/gstsubparse.c
+++ b/gst/subparse/gstsubparse.c
@@ -93,17 +93,6 @@ gst_sub_parse_dispose (GObject * object)
GST_DEBUG_OBJECT (subparse, "cleaning up subtitle parser");
- switch (subparse->parser_type) {
- case GST_SUB_PARSE_FORMAT_QTTEXT:
- qttext_context_deinit (&subparse->state);
- break;
- case GST_SUB_PARSE_FORMAT_SAMI:
- sami_context_deinit (&subparse->state);
- break;
- default:
- break;
- }
-
if (subparse->encoding) {
g_free (subparse->encoding);
subparse->encoding = NULL;
@@ -1161,8 +1150,11 @@ parser_state_dispose (GstSubParse * self, ParserState * state)
}
if (state->user_data) {
switch (self->parser_type) {
+ case GST_SUB_PARSE_FORMAT_QTTEXT:
+ qttext_context_deinit (state);
+ break;
case GST_SUB_PARSE_FORMAT_SAMI:
- sami_context_reset (state);
+ sami_context_deinit (state);
break;
default:
break;
diff --git a/gst/subparse/samiparse.c b/gst/subparse/samiparse.c
index 032a04f75..a38396325 100644
--- a/gst/subparse/samiparse.c
+++ b/gst/subparse/samiparse.c
@@ -825,14 +825,16 @@ sami_context_init (ParserState * state)
GstSamiContext *context;
g_assert (state->user_data == NULL);
- state->user_data = (gpointer) g_new0 (GstSamiContext, 1);
- context = (GstSamiContext *) state->user_data;
+
+ context = g_new0 (GstSamiContext, 1);
context->htmlctxt = html_context_new (&samiParser, context);
context->buf = g_string_new ("");
context->rubybuf = g_string_new ("");
context->resultbuf = g_string_new ("");
context->state = g_string_new ("");
+
+ state->user_data = context;
}
void