Browse Source

net: Fix string-concat hot path bug

Also removes functionality added in f9fec3a2d6
because it changes API. (That patch shouldn't have been added anyway.)
v0.7.4-release
Ryan Dahl 13 years ago
parent
commit
dea49e3d19
  1. 20
      lib/net.js
  2. 56
      test/simple/test-net-write-callbacks.js

20
lib/net.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;
}

56
test/simple/test-net-write-callbacks.js

@ -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);
});
Loading…
Cancel
Save