diff options
author | Vineeth TM <vineeth.tm@samsung.com> | 2015-10-15 10:01:38 +0900 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2015-10-17 11:03:50 +0300 |
commit | b33bb8527fc4f4a189baa85d4fdcff9901be4976 (patch) | |
tree | 6ed4cb5efac2108003ffca2c8ad0310f2b3e557e | |
parent | 18abd0295f09f1630ba52d820e83fce279984f3a (diff) | |
download | gstreamer-plugins-base-b33bb8527fc4f4a189baa85d4fdcff9901be4976.tar.gz |
playsink: Fix volume element leak
In case sink implements a streamvolume interface, volume element is being got
from the sink. But this is transfer full. So the memory should be freed before
setting it to NULL. This was resulting in major memory leaks
https://bugzilla.gnome.org/show_bug.cgi?id=755867
-rw-r--r-- | gst/playback/gstplaysink.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/gst/playback/gstplaysink.c b/gst/playback/gstplaysink.c index aa43111a6..6250134e9 100644 --- a/gst/playback/gstplaysink.c +++ b/gst/playback/gstplaysink.c @@ -3472,6 +3472,8 @@ gst_play_sink_do_reconfigure (GstPlaySink * playsink) activate_chain (GST_PLAY_CHAIN (playsink->audiochain), FALSE); disconnect_audio_chain (playsink->audiochain, playsink); + if (playsink->audiochain->volume) + gst_object_unref (playsink->audiochain->volume); playsink->audiochain->volume = NULL; if (playsink->audiochain->ts_offset) gst_object_unref (playsink->audiochain->ts_offset); @@ -3580,6 +3582,8 @@ gst_play_sink_do_reconfigure (GstPlaySink * playsink) if (playsink->audiochain->sink_volume) { disconnect_audio_chain (playsink->audiochain, playsink); + if (playsink->audiochain->volume) + gst_object_unref (playsink->audiochain->volume); playsink->audiochain->volume = NULL; if (playsink->audiochain->ts_offset) gst_object_unref (playsink->audiochain->ts_offset); @@ -4786,6 +4790,8 @@ gst_play_sink_change_state (GstElement * element, GstStateChange transition) /* remove our links to the volume elements when they were * provided by a sink */ disconnect_audio_chain (playsink->audiochain, playsink); + if (playsink->audiochain->volume) + gst_object_unref (playsink->audiochain->volume); playsink->audiochain->volume = NULL; } |