From 8a4432cc2e55e19797e7d068ca32bbecd1fcce10 Mon Sep 17 00:00:00 2001 From: Artem Pavlenko Date: Wed, 13 Nov 2019 18:42:39 +0000 Subject: Adjust external memory after freeing image buffer (ref ##15915) --- platform/node/src/node_map.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/platform/node/src/node_map.cpp b/platform/node/src/node_map.cpp index fbdd194472..a8ef14f5f7 100644 --- a/platform/node/src/node_map.cpp +++ b/platform/node/src/node_map.cpp @@ -542,12 +542,18 @@ void NodeMap::renderFinished() { auto image_size = img.bytes(); v8::Local pixels = Nan::NewBuffer( - reinterpret_cast(img.data.get()), image_size, [](char* buf, void*) { delete[] buf; }, nullptr) - .ToLocalChecked(); + reinterpret_cast(img.data.get()), image_size, + [](char* buf, void* hint) { + delete[] buf; + std::int64_t* mem_freed = reinterpret_cast(hint); + Nan::AdjustExternalMemory(-(*mem_freed + sizeof(std::int64_t))); + delete mem_freed; + }, new std::int64_t(image_size)) + .ToLocalChecked(); if (!pixels.IsEmpty()) { img.data.release(); } - Nan::AdjustExternalMemory(image_size); + Nan::AdjustExternalMemory(image_size + sizeof(std::int64_t)); v8::Local argv[] = { Nan::Null(), pixels -- cgit v1.2.1