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

Hugo Beauzée-Luyssen hugo at beauzee.fr
Wed Mar 1 09:57:46 CET 2017


On Wed, Mar 1, 2017, at 09:52 AM, Filip Roséen 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 guess using qDeleteAll would be easier. LGTM otherwise

-- 
  Hugo Beauzée-Luyssen
  hugo at beauzee.fr


More information about the vlc-devel mailing list