0
0
mirror of https://github.com/nodejs/node.git synced 2024-12-01 16:10:02 +01:00

Slightly better buffer allocation. (Probably not worth it.)

This commit is contained in:
Ryan 2009-05-15 22:41:36 +02:00
parent fb96f07ece
commit 2cb81113ec
2 changed files with 31 additions and 2 deletions

View File

@ -269,6 +269,30 @@ Connection::v8ForceClose (const Arguments& args)
return Undefined();
}
static void
free_buf (oi_buf *b)
{
V8::AdjustAmountOfExternalAllocatedMemory(-b->len);
free(b);
}
static oi_buf *
new_buf (size_t size)
{
size_t total = sizeof(oi_buf) + size;
void *p = malloc(total);
if (p == NULL) return NULL;
oi_buf *b = static_cast<oi_buf*>(p);
b->base = static_cast<char*>(p) + sizeof(oi_buf);
b->len = size;
b->release = free_buf;
V8::AdjustAmountOfExternalAllocatedMemory(total);
return b;
}
Handle<Value>
Connection::v8Send (const Arguments& args)
@ -291,7 +315,7 @@ Connection::v8Send (const Arguments& args)
// utf8 encoding
Local<String> s = args[0]->ToString();
size_t length = s->Utf8Length();
oi_buf *buf = oi_buf_new2(length);
oi_buf *buf = new_buf(length);
s->WriteUtf8(buf->base, length);
connection->Send(buf);
@ -299,7 +323,7 @@ Connection::v8Send (const Arguments& args)
// raw encoding
Handle<Array> array = Handle<Array>::Cast(args[0]);
size_t length = array->Length();
oi_buf *buf = oi_buf_new2(length);
oi_buf *buf = new_buf(length);
for (size_t i = 0; i < length; i++) {
Local<Value> int_value = array->Get(Integer::New(i));
buf->base[i] = int_value->IntegerValue();

View File

@ -17,6 +17,11 @@ new node.http.Server(function (msg) {
} else if (command == "quit") {
msg.connection.server.close();
body = "quitting";
} else if (command == "fixed") {
body = "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC";
} else {
status = 404;
body = "not found\n";