From 3eea81e4a2b32bf0188fc31b3d60322494f23c32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim-Philipp=20M=C3=BCller?= Date: Tue, 16 Jul 2013 18:30:50 +0100 Subject: [PATCH] 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. --- gst/subparse/gstsubparse.c | 16 ++++------------ gst/subparse/samiparse.c | 6 ++++-- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/gst/subparse/gstsubparse.c b/gst/subparse/gstsubparse.c index 983bec65b0..40789e1a1a 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 afd58855f7..cd84fc1a5f 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