Blob Blame History Raw
commit 3e9f61f305dc4c988e6f2718df56df80f639734e
Author: Martin Banky <Martin.Banky@gmail.com>
Date:   Thu Oct 15 23:07:32 2015 -0700

    Scene Graph: Fixed memory leak in QSGBatchRenderer::Renderer::map()
    
    In the uncommon case (m_context->hasBrokenIndexBufferObjects()
    || m_visualizeMode != VisualizeNothing) of mapping a buffer, malloc is
    called without first freeing the previous malloc.
    
    Regression was introduced with:
        qt5 commit: 9347499e78f03710eaf24af3c1e7ac650d0ef81d
        qtdeclarative commit: a371bac3fba73f92aaa63a68d8ab1ae81a1d1031
    
    [ChangeLog][QtQuick][Scene Graph] Fixed memory leak in
    QSGBatchRenderer::Renderer::map()
    
    Task-number: QTBUG-48799
    Change-Id: I5ef4b7301d390463845aeb192851f86655962499
    Reviewed-by: Gunnar Sletta <gunnar@sletta.org>

diff --git a/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp b/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp
index 42b9f52..4b0bc68 100644
--- a/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp
+++ b/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp
@@ -895,11 +895,11 @@ void Renderer::map(Buffer *buffer, int byteSize, bool isIndexBuf)
         if (byteSize > pool.size())
             pool.resize(byteSize);
         buffer->data = pool.data();
-    } else {
+    } else if (buffer->size != byteSize) {
+        free(buffer->data);
         buffer->data = (char *) malloc(byteSize);
     }
     buffer->size = byteSize;
-
 }
 
 void Renderer::unmap(Buffer *buffer, bool isIndexBuf)