[vlc-devel] [PATCH] gui/qt: pictureflow: clear cache on destruction

Rémi Denis-Courmont remi at remlab.net
Wed Mar 1 15:16:45 CET 2017


On March 1, 2017 10:52:03 AM GMT+02:00, "Filip Roséen" <filip at atch.se> wrote:
>PictureFlowRenderer::cache is used to store QImage's for later use,
>though given that no clean-up was previously implemented we would leak
>all QImage's inside the container.
>
>--
>
>Indirect leak of 8 byte(s) in 1 object(s) allocated from:
>#0 0x7f9887fb3e80 in operator new(unsigned long)
>/build/gcc-multilib/src/gcc/libsanitizer/asan/asan_new_delete.cc:60
>#1 0x7f9864f77f82 in QRasterPaintEngine::init()
>(/usr/lib/libQt5Gui.so.5+0x33ff82)
>#2 0x7f9864d712d7 in QImage::paintEngine() const
>(/usr/lib/libQt5Gui.so.5+0x1392d7)
>#3 0x7f9864f91655 in QPainter::begin(QPaintDevice*)
>(/usr/lib/libQt5Gui.so.5+0x359655)
>#4 0x7f98660f97f9 in prepareSurface
>/home/refp/work/videolan/vlc/git/modules/gui/qt/util/pictureflow.cpp:351
>#5 0x7f9866104e66 in PictureFlowSoftwareRenderer::surface(QModelIndex)
>/home/refp/work/videolan/vlc/git/modules/gui/qt/util/pictureflow.cpp:478
>#6 0x7f9866105954 in PictureFlowSoftwareRenderer::renderSlide(SlideInfo
>const&, int, int)
>/home/refp/work/videolan/vlc/git/modules/gui/qt/util/pictureflow.cpp:513
>#7 0x7f9866107937 in PictureFlowSoftwareRenderer::renderSlides()
>/home/refp/work/videolan/vlc/git/modules/gui/qt/util/pictureflow.cpp:619
>#8 0x7f9866107b79 in PictureFlowSoftwareRenderer::render()
>/home/refp/work/videolan/vlc/git/modules/gui/qt/util/pictureflow.cpp:628
>#9 0x7f9866107f7b in PictureFlowSoftwareRenderer::paint()
>/home/refp/work/videolan/vlc/git/modules/gui/qt/util/pictureflow.cpp:281
>#10 0x7f98660fc90a in PictureFlow::paintEvent(QPaintEvent*)
>/home/refp/work/videolan/vlc/git/modules/gui/qt/util/pictureflow.cpp:855
>#11 0x7f9865711cd7 in QWidget::event(QEvent*)
>(/usr/lib/libQt5Widgets.so.5+0x19acd7)
>#12 0x7f98656ca34b in QApplicationPrivate::notify_helper(QObject*,
>QEvent*) (/usr/lib/libQt5Widgets.so.5+0x15334b)
>#13 0x7f98656d1b60 in QApplication::notify(QObject*, QEvent*)
>(/usr/lib/libQt5Widgets.so.5+0x15ab60)
>#14 0x7f98647e443f in QCoreApplication::notifyInternal2(QObject*,
>QEvent*) (/usr/lib/libQt5Core.so.5+0x28843f
>---
> modules/gui/qt/util/pictureflow.cpp | 7 +++++++
> 1 file changed, 7 insertions(+)
>
>diff --git a/modules/gui/qt/util/pictureflow.cpp
>b/modules/gui/qt/util/pictureflow.cpp
>index a76a4accb1..551127c2ef 100644
>--- a/modules/gui/qt/util/pictureflow.cpp
>+++ b/modules/gui/qt/util/pictureflow.cpp
>@@ -257,6 +257,13 @@
>PictureFlowSoftwareRenderer::PictureFlowSoftwareRenderer():
> PictureFlowSoftwareRenderer::~PictureFlowSoftwareRenderer()
> {
>     buffer = QImage();
>+
>+    for( QHash<QString, QImage*>::const_iterator
>+         it = cache.constBegin(); it != cache.constEnd(); ++it )
>+    {
>+        delete it.value();
>+    }
>+
>     cache.clear();
>     delete blankSurface;
> }
>-- 
>2.12.0
>
>_______________________________________________
>vlc-devel mailing list
>To unsubscribe or modify your subscription options:
>https://mailman.videolan.org/listinfo/vlc-devel

I do not know if the patch is valid or not. But "indirect" leak implies that the container is leaked. (And so, that a double free could potentially occur if the container leak is fixed.)

Isn't there a "direct" leak?
-- 
Rémi Denis-Courmont


More information about the vlc-devel mailing list