summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorisaacs <i@izs.me>2012-12-17 08:45:21 -0800
committerisaacs <i@izs.me>2012-12-17 10:47:17 -0800
commit6c5356bfe26abcac24276681805744ea2d2d3af3 (patch)
treea9da30f19aedb99acfcc31fcbd0bac56e9f8d4e1
parent1c265c54a20a6f5c6d50ce671dc5df6901d11221 (diff)
downloadnode-6c5356bfe26abcac24276681805744ea2d2d3af3.tar.gz
Revert "buffer: allocate memory with mmap()"
Also Revert "buffer: use MAP_ANON, fix OS X build" This reverts commit ddb15603e74e9aa865f3e1099dc2cc5886f9c46e. This reverts commit 2433ec8276838e90136669d5b1215ba597f15fdd.
-rw-r--r--lib/buffer.js3
-rw-r--r--src/node_buffer.cc76
-rw-r--r--src/node_buffer.h3
-rw-r--r--test/simple/test-buffer-release.js37
4 files changed, 5 insertions, 114 deletions
diff --git a/lib/buffer.js b/lib/buffer.js
index afcc4949c..9c57cad7a 100644
--- a/lib/buffer.js
+++ b/lib/buffer.js
@@ -20,7 +20,6 @@
// USE OR OTHER DEALINGS IN THE SOFTWARE.
var SlowBuffer = process.binding('buffer').SlowBuffer;
-var kPoolSize = process.binding('buffer').kPoolSize;
var assert = require('assert');
exports.INSPECT_MAX_BYTES = 50;
@@ -298,7 +297,7 @@ Buffer.isEncoding = function(encoding) {
-Buffer.poolSize = kPoolSize; // see src/node_buffer.h
+Buffer.poolSize = 8 * 1024;
var pool;
function allocPool() {
diff --git a/src/node_buffer.cc b/src/node_buffer.cc
index 94447d09f..a49e8b5e6 100644
--- a/src/node_buffer.cc
+++ b/src/node_buffer.cc
@@ -29,12 +29,6 @@
#include <assert.h>
#include <string.h> // memcpy
-#ifdef __POSIX__
-# include <sys/mman.h> // mmap
-# include <unistd.h> // sysconf
-# include <stdio.h> // perror
-#endif
-
#define MIN(a,b) ((a) < (b) ? (a) : (b))
#define BUFFER_CLASS_ID (0xBABE)
@@ -202,67 +196,6 @@ Buffer::~Buffer() {
}
-#if defined(__POSIX__)
-
-static unsigned int num_pool_buffers;
-static char* cached_pool_buffers[16];
-
-
-static inline void free_buf_mem(char* buf, size_t len) {
- if (len == Buffer::kPoolSize &&
- num_pool_buffers < ARRAY_SIZE(cached_pool_buffers)) {
- cached_pool_buffers[num_pool_buffers++] = buf;
- return;
- }
-
- if (munmap(buf, len)) {
- perror("munmap");
- abort();
- }
-}
-
-
-static inline char* alloc_buf_mem(size_t len) {
- size_t pagesize = sysconf(_SC_PAGESIZE);
-
- len = ROUND_UP(len, pagesize);
- if (len == Buffer::kPoolSize && num_pool_buffers > 0) {
- return cached_pool_buffers[--num_pool_buffers];
- }
-
- int prot = PROT_READ | PROT_WRITE;
- int flags = MAP_ANON | MAP_PRIVATE; // OS X doesn't know MAP_ANONYMOUS...
- char* buf = static_cast<char*>(mmap(NULL, len, prot, flags, -1, 0));
-
- if (buf == NULL) {
- TryCatch try_catch;
- char errmsg[256];
- snprintf(errmsg,
- sizeof(errmsg),
- "Out of memory, mmap(len=%lu) failed.",
- static_cast<unsigned long>(len));
- ThrowError(errmsg);
- FatalException(try_catch);
- abort();
- }
-
- return buf;
-}
-
-#else // !__POSIX__
-
-static inline void free_buf_mem(char* buf, size_t len) {
- delete[] buf;
-}
-
-
-static inline char* alloc_buf_mem(size_t len) {
- return new char[len];
-}
-
-#endif // __POSIX__
-
-
// if replace doesn't have a callback, data must be copied
// const_cast in Buffer::New requires this
void Buffer::Replace(char *data, size_t length,
@@ -272,7 +205,7 @@ void Buffer::Replace(char *data, size_t length,
if (callback_) {
callback_(data_, callback_hint_);
} else if (length_) {
- free_buf_mem(data_, length_);
+ delete [] data_;
V8::AdjustAmountOfExternalAllocatedMemory(
-static_cast<intptr_t>(sizeof(Buffer) + length_));
}
@@ -284,8 +217,9 @@ void Buffer::Replace(char *data, size_t length,
if (callback_) {
data_ = data;
} else if (length_) {
- data_ = alloc_buf_mem(length_);
- if (data != NULL) memcpy(data_, data, length_);
+ data_ = new char[length_];
+ if (data)
+ memcpy(data_, data, length_);
V8::AdjustAmountOfExternalAllocatedMemory(sizeof(Buffer) + length_);
} else {
data_ = NULL;
@@ -896,8 +830,6 @@ void Buffer::Initialize(Handle<Object> target) {
Buffer::MakeFastBuffer);
target->Set(String::NewSymbol("SlowBuffer"), constructor_template->GetFunction());
- target->Set(String::NewSymbol("kPoolSize"),
- Integer::NewFromUnsigned(kPoolSize));
HeapProfiler::DefineWrapperClass(BUFFER_CLASS_ID, WrapperInfo);
}
diff --git a/src/node_buffer.h b/src/node_buffer.h
index a41fffa60..137a6cfb4 100644
--- a/src/node_buffer.h
+++ b/src/node_buffer.h
@@ -68,9 +68,6 @@ class NODE_EXTERN Buffer: public ObjectWrap {
// mirrors deps/v8/src/objects.h
static const unsigned int kMaxLength = 0x3fffffff;
- // exported in lib/buffer.js as Buffer.poolSize
- static const unsigned int kPoolSize = 32768;
-
static v8::Persistent<v8::FunctionTemplate> constructor_template;
static bool HasInstance(v8::Handle<v8::Value> val);
diff --git a/test/simple/test-buffer-release.js b/test/simple/test-buffer-release.js
deleted file mode 100644
index 33971c95d..000000000
--- a/test/simple/test-buffer-release.js
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright Joyent, Inc. and other Node contributors.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a
-// copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to permit
-// persons to whom the Software is furnished to do so, subject to the
-// following conditions:
-//
-// The above copyright notice and this permission notice shall be included
-// in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
-// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
-// USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-var common = require('../common');
-var assert = require('assert');
-
-function alloc() {
- var h = {};
- for (var i = 0; i < 10000; ++i) h[i] = new Buffer(20000);
- h = null;
-}
-
-alloc();
-alloc();
-alloc();
-
-// Note: this assertion fails when run under valgrind because valgrind
-// increases the RSS footprint of node with at least 50 MB.
-assert(process.memoryUsage().rss < 32*1024*1024);