midiparse: don't leak midi data

This commit is contained in:
Wim Taymans 2013-03-21 17:16:24 +01:00
parent 5256b6bf89
commit 7a14606b51
2 changed files with 5 additions and 2 deletions

View file

@ -190,6 +190,7 @@ gst_midi_parse_finalize (GObject * object)
midiparse = GST_MIDI_PARSE (object); midiparse = GST_MIDI_PARSE (object);
g_object_unref (midiparse->adapter); g_object_unref (midiparse->adapter);
g_free (midiparse->data);
G_OBJECT_CLASS (parent_class)->finalize (object); G_OBJECT_CLASS (parent_class)->finalize (object);
} }
@ -806,6 +807,7 @@ gst_midi_parse_parse_song (GstMidiParse * midiparse)
size = gst_adapter_available (midiparse->adapter); size = gst_adapter_available (midiparse->adapter);
data = gst_adapter_take (midiparse->adapter, size); data = gst_adapter_take (midiparse->adapter, size);
midiparse->data = data;
midiparse->tempo = DEFAULT_TEMPO; midiparse->tempo = DEFAULT_TEMPO;
if (!find_midi_chunk (midiparse, data, size, &offset, &length)) if (!find_midi_chunk (midiparse, data, size, &offset, &length))
@ -840,13 +842,11 @@ gst_midi_parse_parse_song (GstMidiParse * midiparse)
short_file: short_file:
{ {
GST_ERROR_OBJECT (midiparse, "not enough data"); GST_ERROR_OBJECT (midiparse, "not enough data");
g_free (data);
return GST_FLOW_ERROR; return GST_FLOW_ERROR;
} }
invalid_format: invalid_format:
{ {
GST_ERROR_OBJECT (midiparse, "invalid format"); GST_ERROR_OBJECT (midiparse, "invalid format");
g_free (data);
return GST_FLOW_ERROR; return GST_FLOW_ERROR;
} }
} }
@ -1087,6 +1087,8 @@ gst_midi_parse_change_state (GstElement * element, GstStateChange transition)
break; break;
case GST_STATE_CHANGE_PAUSED_TO_READY: case GST_STATE_CHANGE_PAUSED_TO_READY:
gst_adapter_clear (midiparse->adapter); gst_adapter_clear (midiparse->adapter);
g_free (midiparse->data);
midiparse->data = NULL;
break; break;
case GST_STATE_CHANGE_READY_TO_NULL: case GST_STATE_CHANGE_READY_TO_NULL:
break; break;

View file

@ -67,6 +67,7 @@ struct _GstMidiParse
guint64 offset; guint64 offset;
GstAdapter *adapter; GstAdapter *adapter;
guint8 *data;
/* output data */ /* output data */
gboolean discont; gboolean discont;