From fbf60a61a005f13b9d5e6b3e445e2d40723663c4 Mon Sep 17 00:00:00 2001 From: Matthew Waters Date: Thu, 3 Jun 2021 20:33:45 +1000 Subject: qtitem: don't potentially leak a large number of buffers The only other place where these queued buffers are removed, is in setCaps() but that is not called at all on shutdown so this list of buffers could not be removed. Part-of: --- ext/qt/qtitem.cc | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'ext') diff --git a/ext/qt/qtitem.cc b/ext/qt/qtitem.cc index 726296da3..1b0ba5a6a 100644 --- a/ext/qt/qtitem.cc +++ b/ext/qt/qtitem.cc @@ -141,6 +141,8 @@ QtGLVideoItem::QtGLVideoItem() QtGLVideoItem::~QtGLVideoItem() { + GstBuffer *tmp_buffer; + /* Before destroying the priv info, make sure * no qmlglsink's will call in again, and that * any ongoing calls are done by invalidating the proxy @@ -157,6 +159,15 @@ QtGLVideoItem::~QtGLVideoItem() if (this->priv->display) gst_object_unref(this->priv->display); + while ((tmp_buffer = (GstBuffer*) g_queue_pop_head (&this->priv->potentially_unbound_buffers))) { + GST_TRACE ("old buffer %p should be unbound now, unreffing", tmp_buffer); + gst_buffer_unref (tmp_buffer); + } + while ((tmp_buffer = (GstBuffer*) g_queue_pop_head (&this->priv->bound_buffers))) { + GST_TRACE ("old buffer %p should be unbound now, unreffing", tmp_buffer); + gst_buffer_unref (tmp_buffer); + } + gst_buffer_replace (&this->priv->buffer, NULL); gst_caps_replace (&this->priv->caps, NULL); -- cgit v1.2.1