Permalink
Browse files

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
  • Loading branch information...
1 parent 18abd02 commit b33bb8527fc4f4a189baa85d4fdcff9901be4976 Vineeth TM committed with sdroege Oct 15, 2015
Showing with 6 additions and 0 deletions.
  1. +6 −0 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;
}

0 comments on commit b33bb85

Please sign in to comment.