diff --git a/vcl/skia/osx/gdiimpl.cxx b/vcl/skia/osx/gdiimpl.cxx index c4bd75184242..56ace4ad4cfb 100644 --- a/vcl/skia/osx/gdiimpl.cxx +++ b/vcl/skia/osx/gdiimpl.cxx @@ -37,10 +37,20 @@ using namespace SkiaHelper; +static std::map aReleaseInstalledPixels; + static void releaseInstalledPixels(void* pAddr, void*) { if (pAddr) - delete[] static_cast(pAddr); + { + std::map::iterator it = aReleaseInstalledPixels.find((sal_uInt8*)pAddr); + if (it != aReleaseInstalledPixels.end()) + { + delete[] it->first; + aReleaseInstalledPixels.erase(it); + } + } + fprintf(stderr, "After: %lu\n", aReleaseInstalledPixels.size()); } AquaSkiaSalGraphicsImpl::AquaSkiaSalGraphicsImpl(AquaSalGraphics& rParent, @@ -251,6 +261,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). @@ -289,6 +300,8 @@ bool AquaSkiaSalGraphicsImpl::drawNativeControl(ControlType nType, ControlPart n kPremul_SkAlphaType), data, width * 4, releaseInstalledPixels, nullptr)) abort(); + aReleaseInstalledPixels[data] = data; + fprintf(stderr, "Before: %lu\n", aReleaseInstalledPixels.size()); // Make bitmap immutable to avoid making a copy in bitmap.asImage() bitmap.setImmutable();