diff --git a/src/node_zlib.cc b/src/node_zlib.cc index 406c042b91..4a60c875d7 100644 --- a/src/node_zlib.cc +++ b/src/node_zlib.cc @@ -74,9 +74,11 @@ class ZCtx : public ObjectWrap { if (mode_ == DEFLATE || mode_ == GZIP || mode_ == DEFLATERAW) { (void)deflateEnd(&strm_); + V8::AdjustAmountOfExternalAllocatedMemory(-kDeflateContextSize); } else if (mode_ == INFLATE || mode_ == GUNZIP || mode_ == INFLATERAW || mode_ == UNZIP) { (void)inflateEnd(&strm_); + V8::AdjustAmountOfExternalAllocatedMemory(-kInflateContextSize); } mode_ = NONE; @@ -375,12 +377,14 @@ class ZCtx : public ObjectWrap { ctx->windowBits_, ctx->memLevel_, ctx->strategy_); + V8::AdjustAmountOfExternalAllocatedMemory(kDeflateContextSize); break; case INFLATE: case GUNZIP: case INFLATERAW: case UNZIP: ctx->err_ = inflateInit2(&ctx->strm_, ctx->windowBits_); + V8::AdjustAmountOfExternalAllocatedMemory(kInflateContextSize); break; default: assert(0 && "wtf?"); @@ -441,6 +445,8 @@ class ZCtx : public ObjectWrap { } private: + static const int kDeflateContextSize = 16384; // approximate + static const int kInflateContextSize = 10240; // approximate bool init_done_;