diff --git a/src/tcp_wrap.cc b/src/tcp_wrap.cc index 8a199bd7b69..9de6c79f10a 100644 --- a/src/tcp_wrap.cc +++ b/src/tcp_wrap.cc @@ -58,8 +58,6 @@ static size_t slab_used; static uv_tcp_t* handle_that_last_alloced; static Persistent slab_sym; -static Persistent offset_sym; -static Persistent length_sym; static Persistent buffer_sym; class TCPWrap; @@ -104,8 +102,6 @@ class TCPWrap { constructor = Persistent::New(t->GetFunction()); slab_sym = Persistent::New(String::NewSymbol("slab")); - offset_sym = Persistent::New(String::NewSymbol("offset")); - length_sym = Persistent::New(String::NewSymbol("length")); buffer_sym = Persistent::New(String::NewSymbol("buffer")); target->Set(String::NewSymbol("TCP"), constructor); @@ -313,17 +309,15 @@ class TCPWrap { } if (nread > 0) { - Local slice = Object::New(); - slice->Set(slab_sym, slab_v); - slice->Set(offset_sym, Integer::New(wrap->slab_offset_)); - slice->Set(length_sym, Integer::New(nread)); - - Local argv[1] = { slice }; - MakeCallback(wrap->object_, "onread", 1, argv); + Local argv[3] = { + slab_v, + Integer::New(wrap->slab_offset_), + Integer::New(nread) + }; + MakeCallback(wrap->object_, "onread", 3, argv); } } - // TODO: share me? static Handle Close(const Arguments& args) { HandleScope scope; @@ -352,8 +346,13 @@ class TCPWrap { SetErrno(uv_last_error().code); } - Local argv[1] = { Local::New(wrap->object_) }; - MakeCallback(req_wrap->object_, "oncomplete", 1, argv); + Local argv[3] = { + Local::New(wrap->object_), + Local::New(req_wrap->object_), + req_wrap->object_->GetHiddenValue(buffer_sym), + }; + + MakeCallback(req_wrap->object_, "oncomplete", 3, argv); delete req_wrap; } diff --git a/test/simple/test-tcp-wrap-listen.js b/test/simple/test-tcp-wrap-listen.js index 608b13616bd..6ada670edf5 100644 --- a/test/simple/test-tcp-wrap-listen.js +++ b/test/simple/test-tcp-wrap-listen.js @@ -27,13 +27,21 @@ server.onconnection = function(client) { client.readStart(); client.pendingWrites = []; - client.onread = function(s) { - if (s) { - slice = s; - var req = client.write(s.slab, s.offset, s.length); + client.onread = function(buffer, offset, length) { + if (buffer) { + assert.ok(length > 0); + + var req = client.write(buffer, offset, length); client.pendingWrites.push(req); - req.oncomplete = function() { + + req.oncomplete = function(client_, req_, buffer_) { assert.equal(req, client.pendingWrites.shift()); + + // Check parameters. + assert.equal(client, client_); + assert.equal(req, req_); + assert.equal(buffer, buffer_); + writeCount++; console.log("write " + writeCount); maybeCloseClient(); @@ -72,11 +80,6 @@ process.on('exit', function() { assert.equal(1, eofCount); assert.equal(1, writeCount); assert.equal(1, recvCount); - assert.ok(slice); - assert.ok(slice.slab); - - var s = slice.slab.slice(slice.offset, slice.length, "ascii"); - assert.equal("hello world", s); });