Remove optional AdjustAmountOfExternalAllocatedMemory #151

Isolate not available when deleting the buffer
This commit is contained in:
Lovell Fuller 2015-01-21 20:13:43 +00:00
parent 855945bef2
commit fe34548bad
2 changed files with 10 additions and 17 deletions

View File

@ -34,7 +34,7 @@
"vips"
],
"dependencies": {
"bluebird": "^2.6.4",
"bluebird": "^2.8.2",
"color": "^0.7.3",
"nan": "^1.5.1",
"semver": "^4.2.0"

View File

@ -129,14 +129,10 @@ struct ResizeBaton {
Delete input char[] buffer and notify V8 of memory deallocation
Used as the callback function for the "postclose" signal
*/
static void DeleteBuffer(VipsObject *object, std::tuple<char*, size_t> *buffer) {
char* data = std::get<0>(*buffer);
size_t length = std::get<1>(*buffer);
if (data != NULL) {
delete[] data;
static void DeleteBuffer(VipsObject *object, char *buffer) {
if (buffer != NULL) {
delete[] buffer;
}
NanAdjustExternalMemory(static_cast<int>(-length));
delete buffer;
}
class ResizeWorker : public NanAsyncWorker {
@ -167,21 +163,20 @@ class ResizeWorker : public NanAsyncWorker {
if (baton->bufferInLength > 1) {
// From buffer
inputImageType = DetermineImageType(baton->bufferIn, baton->bufferInLength);
std::tuple<char*, size_t> *buffer = new std::tuple<char*, size_t>(baton->bufferIn, baton->bufferInLength);
if (inputImageType != ImageType::UNKNOWN) {
image = InitImage(inputImageType, baton->bufferIn, baton->bufferInLength, baton->accessMethod);
if (image != NULL) {
// Listen for "postclose" signal to delete input buffer
g_signal_connect(image, "postclose", G_CALLBACK(DeleteBuffer), buffer);
g_signal_connect(image, "postclose", G_CALLBACK(DeleteBuffer), baton->bufferIn);
} else {
// Could not read header data
(baton->err).append("Input buffer has corrupt header");
inputImageType = ImageType::UNKNOWN;
DeleteBuffer(NULL, buffer);
DeleteBuffer(NULL, baton->bufferIn);
}
} else {
(baton->err).append("Input buffer contains unsupported image format");
DeleteBuffer(NULL, buffer);
DeleteBuffer(NULL, baton->bufferIn);
}
} else {
// From file
@ -820,7 +815,7 @@ class ResizeWorker : public NanAsyncWorker {
if (baton->bufferOutLength > 0) {
// Copy data to new Buffer
argv[1] = NanNewBufferHandle(static_cast<char*>(baton->bufferOut), baton->bufferOutLength);
// bufferOut was allocated via malloc
// bufferOut was allocated via g_malloc
g_free(baton->bufferOut);
// Add buffer size to info
info->Set(NanNew<String>("size"), NanNew<Uint32>(static_cast<uint32_t>(baton->bufferOutLength)));
@ -945,8 +940,6 @@ NAN_METHOD(resize) {
baton->bufferIn = new char[baton->bufferInLength];
memcpy(baton->bufferIn, node::Buffer::Data(buffer), baton->bufferInLength);
options->Set(NanNew<String>("bufferIn"), NanNull());
// Notify V8 GC of memory allocation
NanAdjustExternalMemory(static_cast<int>(baton->bufferInLength));
}
// ICC profile to use when input CMYK image has no embedded profile
baton->iccProfilePath = *String::Utf8Value(options->Get(NanNew<String>("iccProfilePath"))->ToString());