vcl/skia/osx/gdiimpl.cxx |   21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)

New commits:
commit dd769dd028dad7b67709e6c4268c595d1916a9e7
Author:     Patrick Luby <guibmac...@gmail.com>
AuthorDate: Thu Feb 22 10:01:00 2024 -0500
Commit:     Christian Lohmaier <lohmaier+libreoff...@googlemail.com>
CommitDate: Thu Apr 11 19:20:17 2024 +0200

    Related: tdf#159529 eliminate possible memory leak
    
    Despite confirming that the release function passed to
    SkBitmap.bitmap.installPixels() does get called for every
    data array that has been allocated, Apple's Instruments
    indicates that the data is leaking. While it is likely a
    false positive, it makes leak analysis difficult so leave
    the bitmap mutable. That causes SkBitmap.asImage() to make
    a copy of the data and the data can be safely deleted here.
    
    Change-Id: Ib28d70bd5f51e6d3be7a7d7c0d5923d71a6e5390
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/163774
    Tested-by: Jenkins
    Reviewed-by: Patrick Luby <guibomac...@gmail.com>
    (cherry picked from commit 3e2dde97bc15f156837d10bf4456deb81f7f554a)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/165187
    Reviewed-by: Christian Lohmaier <lohmaier+libreoff...@googlemail.com>

diff --git a/vcl/skia/osx/gdiimpl.cxx b/vcl/skia/osx/gdiimpl.cxx
index c4bd75184242..9b511ad4469b 100644
--- a/vcl/skia/osx/gdiimpl.cxx
+++ b/vcl/skia/osx/gdiimpl.cxx
@@ -37,12 +37,6 @@
 
 using namespace SkiaHelper;
 
-static void releaseInstalledPixels(void* pAddr, void*)
-{
-    if (pAddr)
-        delete[] static_cast<sal_uInt8*>(pAddr);
-}
-
 AquaSkiaSalGraphicsImpl::AquaSkiaSalGraphicsImpl(AquaSalGraphics& rParent,
                                                  AquaSharedAttributes& rShared)
     : SkiaSalGraphicsImpl(rParent, rShared.mpFrame)
@@ -251,6 +245,7 @@ bool AquaSkiaSalGraphicsImpl::drawNativeControl(ControlType 
nType, ControlPart n
     if (!context)
     {
         SAL_WARN("vcl.skia", "drawNativeControl(): Failed to allocate bitmap 
context");
+        delete[] data;
         return false;
     }
     // Setup context state for drawing (performDrawNativeControl() e.g. fills 
background in some cases).
@@ -287,12 +282,9 @@ bool 
AquaSkiaSalGraphicsImpl::drawNativeControl(ControlType nType, ControlPart n
         if (!bitmap.installPixels(SkImageInfo::Make(width, height,
                                                     
mSurface->imageInfo().colorType(),
                                                     kPremul_SkAlphaType),
-                                  data, width * 4, releaseInstalledPixels, 
nullptr))
+                                  data, width * 4, nullptr, nullptr))
             abort();
 
-        // Make bitmap immutable to avoid making a copy in bitmap.asImage()
-        bitmap.setImmutable();
-
         preDraw();
         SAL_INFO("vcl.skia.trace", "drawnativecontrol(" << this << "): " << 
rControlRegion << ":"
                                                         << int(nType) << "/" 
<< int(nPart));
@@ -312,6 +304,15 @@ bool 
AquaSkiaSalGraphicsImpl::drawNativeControl(ControlType nType, ControlPart n
         ++pendingOperationsToFlush; // tdf#136369
         postDraw();
     }
+    // Related: tdf#159529 eliminate possible memory leak
+    // Despite confirming that the release function passed to
+    // SkBitmap.bitmap.installPixels() does get called for every
+    // data array that has been allocated, Apple's Instruments
+    //  indicates that the data is leaking. While it is likely a
+    // false positive, it makes leak analysis difficult so leave
+    // the bitmap mutable. That causes SkBitmap.asImage() to make
+    // a copy of the data and the data can be safely deleted here.
+    delete[] data;
     return bOK;
 }
 

Reply via email to