Skip to content
This repository has been archived by the owner. It is now read-only.
Permalink
Browse files

net: Fix string-concat hot path bug

Also removes functionality added in f9fec3a
because it changes API. (That patch shouldn't have been added anyway.)
  • Loading branch information...
ry committed Sep 29, 2011
1 parent 942b92a commit dea49e3d1900ffdc56a2077d1d701ec9e38bc58b
Showing with 70 additions and 6 deletions.
  1. +14 −6 lib/net.js
  2. +56 −0 test/simple/test-net-write-callbacks.js
@@ -349,11 +349,13 @@ Socket.prototype.write = function(data /* [encoding], [fd], [cb] */) {
if (!this._writeQueueCallbacks[last]) {
this._writeQueueCallbacks[last] = cb;
} else {
// awful
this._writeQueueCallbacks[last] = function() {
this._writeQueueCallbacks[last]();
cb();
};
var original = this._writeQueueCallbacks[last];

if (Array.isArray(original)) {
original.push(cb);
} else {
this._writeQueueCallbacks[last] = [ original, cb ];
}
}
}
} else {
@@ -465,7 +467,13 @@ Socket.prototype._writeOut = function(data, encoding, fd, cb) {
return false;
} else {
if (cb) {
process.nextTick(cb);
if (Array.isArray(cb)) {
for (var i = 0; i < cb.length; i++) {
if (cb[i]) cb[i]();
}
} else {
cb();
}
}
return true;
}
@@ -0,0 +1,56 @@
// 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 net = require('net');
var assert = require('assert');

var cbcount = 0;
var N = 500000;

var server = net.Server(function(socket) {
socket.on('data', function(d) {
console.error("got %d bytes", d.length);
});

socket.on('end', function() {
console.error("end");
socket.destroy();
server.close();
});
});

server.listen(common.PORT, function() {
var client = net.createConnection(common.PORT);

client.on('connect', function() {
for (var i = 0; i < N; i++) {
client.write("hello world", function() {
cbcount++;
});
}
client.end();
});
});

process.on('exit', function() {
assert.equal(N, cbcount);
});

0 comments on commit dea49e3

Please sign in to comment.
You can’t perform that action at this time.