Skip to content

Commit 5abd4ac

Browse files
committed
lib: simplify nextTick() usage
This commit removes unnecessary nextTick() closures and adds some shared nextTick() callbacks for better re-use. PR-URL: #1612 Reviewed-By: Yosuke Furukawa <yosuke.furukawa@gmail.com> Reviewed-By: Brendan Ashworth <brendan.ashworth@me.com>
1 parent a74c2c9 commit 5abd4ac

7 files changed

+42
-57
lines changed

lib/_stream_writable.js

+3-9
Original file line numberDiff line numberDiff line change
@@ -292,22 +292,16 @@ function doWrite(stream, state, writev, len, chunk, encoding, cb) {
292292
}
293293

294294
function onwriteError(stream, state, sync, er, cb) {
295+
--state.pendingcb;
295296
if (sync)
296-
process.nextTick(onwriteErrorNT, state, cb, er);
297-
else {
298-
state.pendingcb--;
297+
process.nextTick(cb, er);
298+
else
299299
cb(er);
300-
}
301300

302301
stream._writableState.errorEmitted = true;
303302
stream.emit('error', er);
304303
}
305304

306-
function onwriteErrorNT(state, cb, er) {
307-
state.pendingcb--;
308-
cb(er);
309-
}
310-
311305
function onwriteStateUpdate(state) {
312306
state.writing = false;
313307
state.writecb = null;

lib/_tls_legacy.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -448,16 +448,16 @@ CryptoStream.prototype.destroy = function(err) {
448448
}
449449
this._opposite.destroy();
450450

451-
process.nextTick(destroyNT, this, err);
451+
process.nextTick(destroyNT, this, err ? true : false);
452452
};
453453

454454

455-
function destroyNT(self, err) {
455+
function destroyNT(self, hadErr) {
456456
// Force EOF
457457
self.push(null);
458458

459459
// Emit 'close' event
460-
self.emit('close', err ? true : false);
460+
self.emit('close', hadErr);
461461
}
462462

463463

lib/_tls_wrap.js

+1-3
Original file line numberDiff line numberDiff line change
@@ -444,9 +444,7 @@ TLSSocket.prototype.renegotiate = function(options, callback) {
444444
}
445445
if (!this._handle.renegotiate()) {
446446
if (callback) {
447-
process.nextTick(function() {
448-
callback(new Error('Failed to renegotiate'));
449-
});
447+
process.nextTick(callback, new Error('Failed to renegotiate'));
450448
}
451449
return false;
452450
}

lib/dgram.js

+2-7
Original file line numberDiff line numberDiff line change
@@ -320,19 +320,14 @@ Socket.prototype.send = function(buffer,
320320
!!callback);
321321
if (err && callback) {
322322
// don't emit as error, dgram_legacy.js compatibility
323-
process.nextTick(sendEmitErrorNT, err, address, port, callback);
323+
var ex = exceptionWithHostPort(err, 'send', address, port);
324+
process.nextTick(callback, ex);
324325
}
325326
}
326327
});
327328
};
328329

329330

330-
function sendEmitErrorNT(err, address, port, callback) {
331-
var ex = exceptionWithHostPort(err, 'send', address, port);
332-
callback(ex);
333-
}
334-
335-
336331
function afterSend(err) {
337332
if (err) {
338333
err = exceptionWithHostPort(err, 'send', this.address, this.port);

lib/dns.js

+5-6
Original file line numberDiff line numberDiff line change
@@ -61,17 +61,16 @@ function makeAsync(callback) {
6161
// The API already returned, we can invoke the callback immediately.
6262
callback.apply(null, arguments);
6363
} else {
64-
process.nextTick(callMakeAsyncCbNT, callback, arguments);
64+
var args = new Array(arguments.length + 1);
65+
args[0] = callback;
66+
for (var i = 1, a = 0; a < arguments.length; ++i, ++a)
67+
args[i] = arguments[a];
68+
process.nextTick.apply(null, args);
6569
}
6670
};
6771
}
6872

6973

70-
function callMakeAsyncCbNT(callback, args) {
71-
callback.apply(null, args);
72-
}
73-
74-
7574
function onlookup(err, addresses) {
7675
if (err) {
7776
return this.callback(errnoException(err, 'getaddrinfo', this.hostname));

lib/net.js

+22-26
Original file line numberDiff line numberDiff line change
@@ -268,14 +268,10 @@ function writeAfterFIN(chunk, encoding, cb) {
268268
// TODO: defer error events consistently everywhere, not just the cb
269269
self.emit('error', er);
270270
if (typeof cb === 'function') {
271-
process.nextTick(writeAfterFINNT, cb, er);
271+
process.nextTick(cb, er);
272272
}
273273
}
274274

275-
function writeAfterFINNT(cb, er) {
276-
cb(er);
277-
}
278-
279275
exports.Socket = Socket;
280276
exports.Stream = Socket; // Legacy naming.
281277

@@ -442,9 +438,7 @@ Socket.prototype._destroy = function(exception, cb) {
442438
function fireErrorCallbacks() {
443439
if (cb) cb(exception);
444440
if (exception && !self._writableState.errorEmitted) {
445-
process.nextTick(function() {
446-
self.emit('error', exception);
447-
});
441+
process.nextTick(emitErrorNT, self, exception);
448442
self._writableState.errorEmitted = true;
449443
}
450444
}
@@ -962,7 +956,10 @@ function lookupAndConnect(self, options) {
962956
// immediately calls net.Socket.connect() on it (that's us).
963957
// There are no event listeners registered yet so defer the
964958
// error event to the next tick.
965-
process.nextTick(connectErrorNT, self, err, options);
959+
err.host = options.host;
960+
err.port = options.port;
961+
err.message = err.message + ' ' + options.host + ':' + options.port;
962+
process.nextTick(connectErrorNT, self, err);
966963
} else {
967964
self._unrefTimer();
968965
connect(self,
@@ -976,10 +973,7 @@ function lookupAndConnect(self, options) {
976973
}
977974

978975

979-
function connectErrorNT(self, err, options) {
980-
err.host = options.host;
981-
err.port = options.port;
982-
err.message = err.message + ' ' + options.host + ':' + options.port;
976+
function connectErrorNT(self, err) {
983977
self.emit('error', err);
984978
self._destroy();
985979
}
@@ -1205,9 +1199,7 @@ Server.prototype._listen2 = function(address, port, addressType, backlog, fd) {
12051199

12061200
if (typeof rval === 'number') {
12071201
var error = exceptionWithHostPort(rval, 'listen', address, port);
1208-
process.nextTick(function() {
1209-
self.emit('error', error);
1210-
});
1202+
process.nextTick(emitErrorNT, self, error);
12111203
return;
12121204
}
12131205
self._handle = rval;
@@ -1222,9 +1214,7 @@ Server.prototype._listen2 = function(address, port, addressType, backlog, fd) {
12221214
var ex = exceptionWithHostPort(err, 'listen', address, port);
12231215
self._handle.close();
12241216
self._handle = null;
1225-
process.nextTick(function() {
1226-
self.emit('error', ex);
1227-
});
1217+
process.nextTick(emitErrorNT, self, ex);
12281218
return;
12291219
}
12301220

@@ -1239,6 +1229,11 @@ Server.prototype._listen2 = function(address, port, addressType, backlog, fd) {
12391229
};
12401230

12411231

1232+
function emitErrorNT(self, err) {
1233+
self.emit('error', err);
1234+
}
1235+
1236+
12421237
function emitListeningNT(self) {
12431238
// ensure handle hasn't closed
12441239
if (self._handle)
@@ -1412,9 +1407,7 @@ function onconnection(err, clientHandle) {
14121407

14131408
Server.prototype.getConnections = function(cb) {
14141409
function end(err, connections) {
1415-
process.nextTick(function() {
1416-
cb(err, connections);
1417-
});
1410+
process.nextTick(cb, err, connections);
14181411
}
14191412

14201413
if (!this._usingSlaves) {
@@ -1493,13 +1486,16 @@ Server.prototype._emitCloseIfDrained = function() {
14931486
return;
14941487
}
14951488

1496-
process.nextTick(function() {
1497-
debug('SERVER: emit close');
1498-
self.emit('close');
1499-
});
1489+
process.nextTick(emitCloseNT, self);
15001490
};
15011491

15021492

1493+
function emitCloseNT(self) {
1494+
debug('SERVER: emit close');
1495+
self.emit('close');
1496+
}
1497+
1498+
15031499
Server.prototype.listenFD = util.deprecate(function(fd, type) {
15041500
return this.listen({ fd: fd });
15051501
}, 'listenFD is deprecated. Use listen({fd: <number>}).');

lib/timers.js

+6-3
Original file line numberDiff line numberDiff line change
@@ -97,9 +97,7 @@ function listOnTimeout() {
9797
// when the timeout threw its exception.
9898
var oldDomain = process.domain;
9999
process.domain = null;
100-
process.nextTick(function() {
101-
list[kOnTimeout]();
102-
});
100+
process.nextTick(listOnTimeoutNT, list);
103101
process.domain = oldDomain;
104102
}
105103
}
@@ -113,6 +111,11 @@ function listOnTimeout() {
113111
}
114112

115113

114+
function listOnTimeoutNT(list) {
115+
list[kOnTimeout]();
116+
}
117+
118+
116119
const unenroll = exports.unenroll = function(item) {
117120
L.remove(item);
118121

0 commit comments

Comments
 (0)