diff options
author | Artem Pavlenko <artem@mapnik.org> | 2019-11-13 18:42:39 +0000 |
---|---|---|
committer | Artem Pavlenko <artem@mapnik.org> | 2019-11-13 18:46:29 +0000 |
commit | 8a4432cc2e55e19797e7d068ca32bbecd1fcce10 (patch) | |
tree | 20e637fc233aeca9f52ee45cf27c23ada7c1ef67 | |
parent | 27526e6fb3fa304014b5b63edcbf903324f260b0 (diff) | |
download | qtlocation-mapboxgl-upstream/adjust-external-memory.tar.gz |
Adjust external memory after freeing image buffer (ref ##15915)upstream/adjust-external-memory
-rw-r--r-- | platform/node/src/node_map.cpp | 12 |
1 files 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<v8::Object> pixels = Nan::NewBuffer( - reinterpret_cast<char*>(img.data.get()), image_size, [](char* buf, void*) { delete[] buf; }, nullptr) - .ToLocalChecked(); + reinterpret_cast<char*>(img.data.get()), image_size, + [](char* buf, void* hint) { + delete[] buf; + std::int64_t* mem_freed = reinterpret_cast<std::int64_t*>(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<v8::Value> argv[] = { Nan::Null(), pixels |