summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVineeth TM <vineeth.tm@samsung.com>2015-10-15 10:01:38 +0900
committerSebastian Dröge <sebastian@centricular.com>2015-10-17 11:03:50 +0300
commitb33bb8527fc4f4a189baa85d4fdcff9901be4976 (patch)
tree6ed4cb5efac2108003ffca2c8ad0310f2b3e557e
parent18abd0295f09f1630ba52d820e83fce279984f3a (diff)
downloadgstreamer-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.c6
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;
}