From f0f5cfe30727c1d87b4c254661e04d0fc8a3737a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Str=C3=B8mme?= Date: Tue, 13 Jun 2017 15:52:15 +0200 Subject: [PATCH 1/2] Fix memory leak in CameraBinImageCapture The element name needs to be released when we're done with it. Change-Id: I650671288bd143551188094b0d934e7da2028a2d Reviewed-by: VaL Doroshchuk Reviewed-by: Christian Stromme --- src/plugins/gstreamer/camerabin/camerabinimagecapture.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/plugins/gstreamer/camerabin/camerabinimagecapture.cpp b/src/plugins/gstreamer/camerabin/camerabinimagecapture.cpp index 4d77e982..ccc5d299 100644 --- a/src/plugins/gstreamer/camerabin/camerabinimagecapture.cpp +++ b/src/plugins/gstreamer/camerabin/camerabinimagecapture.cpp @@ -301,7 +301,9 @@ bool CameraBinImageCapture::processBusMessage(const QGstreamerMessage &message) if (!element) return false; - QString elementName = QString::fromLatin1(gst_element_get_name(element)); + gchar *name = gst_element_get_name(element); + QString elementName = QString::fromLatin1(name); + g_free(name); #if !GST_CHECK_VERSION(1,0,0) GstElementClass *elementClass = GST_ELEMENT_GET_CLASS(element); QString elementLongName = elementClass->details.longname; From f17f824b68ebbeda323647630c474d18cb1d4789 Mon Sep 17 00:00:00 2001 From: Slava Monich Date: Wed, 2 May 2018 15:00:10 +0300 Subject: [PATCH 2/2] [qtmultimedia] Fixed memory leak in QGstreamerPlayerSession. Fixes JB#41822 ==25456== 83 bytes in 1 blocks are definitely lost in loss record 7,587 of 8,690 ==25456== at 0x483F3EC: malloc (vg_replace_malloc.c:299) ==25456== by 0x5AF00DF: g_malloc (gmem.c:94) ==25456== by 0x5B07185: g_strdup (gstrfuncs.c:363) ==25456== by 0x5A87EC3: value_lcopy_string (gvaluetypes.c:312) ==25456== by 0x5A6B607: g_object_get_valist (gobject.c:2234) ==25456== by 0x5A6B7F3: g_object_get (gobject.c:2322) ==25456== by 0x10241575: QGstreamerPlayerSession::playlistTypeFindFunction(_GstTypeFind*, void*) (qgstreamerplayersession.cpp:1901) --- .../gstreamer/mediaplayer/qgstreamerplayersession.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/plugins/gstreamer/mediaplayer/qgstreamerplayersession.cpp b/src/plugins/gstreamer/mediaplayer/qgstreamerplayersession.cpp index 3d6c455a..5a841c0f 100644 --- a/src/plugins/gstreamer/mediaplayer/qgstreamerplayersession.cpp +++ b/src/plugins/gstreamer/mediaplayer/qgstreamerplayersession.cpp @@ -1896,7 +1896,7 @@ void QGstreamerPlayerSession::playlistTypeFindFunction(GstTypeFind *find, gpoint { QGstreamerPlayerSession* session = (QGstreamerPlayerSession*)userData; - const gchar *uri = 0; + gchar *uri = 0; #if GST_CHECK_VERSION(1,0,0) g_object_get(G_OBJECT(session->m_playbin), "current-uri", &uri, NULL); #else @@ -1909,10 +1909,13 @@ void QGstreamerPlayerSession::playlistTypeFindFunction(GstTypeFind *find, gpoint else length = qMin(length, guint64(1024)); + QString currentUri = QString::fromUtf8(uri); + g_free(uri); + while (length > 0) { const guint8 *data = gst_type_find_peek(find, 0, length); if (data) { - session->m_isPlaylist = (QPlaylistFileParser::findPlaylistType(QString::fromUtf8(uri), 0, data, length) != QPlaylistFileParser::UNKNOWN); + session->m_isPlaylist = (QPlaylistFileParser::findPlaylistType(currentUri, 0, data, length) != QPlaylistFileParser::UNKNOWN); return; } length >>= 1; // for HTTP files length is not available,