lib: simplify nextTick() usage
This commit removes unnecessary nextTick() closures and adds some shared nextTick() callbacks for better re-use. PR-URL: https://github.com/nodejs/io.js/pull/1612 Reviewed-By: Yosuke Furukawa <yosuke.furukawa@gmail.com> Reviewed-By: Brendan Ashworth <brendan.ashworth@me.com>
This commit is contained in:
parent
a74c2c9458
commit
5abd4ac079
@ -292,22 +292,16 @@ function doWrite(stream, state, writev, len, chunk, encoding, cb) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function onwriteError(stream, state, sync, er, cb) {
|
function onwriteError(stream, state, sync, er, cb) {
|
||||||
|
--state.pendingcb;
|
||||||
if (sync)
|
if (sync)
|
||||||
process.nextTick(onwriteErrorNT, state, cb, er);
|
process.nextTick(cb, er);
|
||||||
else {
|
else
|
||||||
state.pendingcb--;
|
|
||||||
cb(er);
|
cb(er);
|
||||||
}
|
|
||||||
|
|
||||||
stream._writableState.errorEmitted = true;
|
stream._writableState.errorEmitted = true;
|
||||||
stream.emit('error', er);
|
stream.emit('error', er);
|
||||||
}
|
}
|
||||||
|
|
||||||
function onwriteErrorNT(state, cb, er) {
|
|
||||||
state.pendingcb--;
|
|
||||||
cb(er);
|
|
||||||
}
|
|
||||||
|
|
||||||
function onwriteStateUpdate(state) {
|
function onwriteStateUpdate(state) {
|
||||||
state.writing = false;
|
state.writing = false;
|
||||||
state.writecb = null;
|
state.writecb = null;
|
||||||
|
@ -448,16 +448,16 @@ CryptoStream.prototype.destroy = function(err) {
|
|||||||
}
|
}
|
||||||
this._opposite.destroy();
|
this._opposite.destroy();
|
||||||
|
|
||||||
process.nextTick(destroyNT, this, err);
|
process.nextTick(destroyNT, this, err ? true : false);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
function destroyNT(self, err) {
|
function destroyNT(self, hadErr) {
|
||||||
// Force EOF
|
// Force EOF
|
||||||
self.push(null);
|
self.push(null);
|
||||||
|
|
||||||
// Emit 'close' event
|
// Emit 'close' event
|
||||||
self.emit('close', err ? true : false);
|
self.emit('close', hadErr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -444,9 +444,7 @@ TLSSocket.prototype.renegotiate = function(options, callback) {
|
|||||||
}
|
}
|
||||||
if (!this._handle.renegotiate()) {
|
if (!this._handle.renegotiate()) {
|
||||||
if (callback) {
|
if (callback) {
|
||||||
process.nextTick(function() {
|
process.nextTick(callback, new Error('Failed to renegotiate'));
|
||||||
callback(new Error('Failed to renegotiate'));
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -320,19 +320,14 @@ Socket.prototype.send = function(buffer,
|
|||||||
!!callback);
|
!!callback);
|
||||||
if (err && callback) {
|
if (err && callback) {
|
||||||
// don't emit as error, dgram_legacy.js compatibility
|
// don't emit as error, dgram_legacy.js compatibility
|
||||||
process.nextTick(sendEmitErrorNT, err, address, port, callback);
|
var ex = exceptionWithHostPort(err, 'send', address, port);
|
||||||
|
process.nextTick(callback, ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
function sendEmitErrorNT(err, address, port, callback) {
|
|
||||||
var ex = exceptionWithHostPort(err, 'send', address, port);
|
|
||||||
callback(ex);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function afterSend(err) {
|
function afterSend(err) {
|
||||||
if (err) {
|
if (err) {
|
||||||
err = exceptionWithHostPort(err, 'send', this.address, this.port);
|
err = exceptionWithHostPort(err, 'send', this.address, this.port);
|
||||||
|
11
lib/dns.js
11
lib/dns.js
@ -61,17 +61,16 @@ function makeAsync(callback) {
|
|||||||
// The API already returned, we can invoke the callback immediately.
|
// The API already returned, we can invoke the callback immediately.
|
||||||
callback.apply(null, arguments);
|
callback.apply(null, arguments);
|
||||||
} else {
|
} else {
|
||||||
process.nextTick(callMakeAsyncCbNT, callback, arguments);
|
var args = new Array(arguments.length + 1);
|
||||||
|
args[0] = callback;
|
||||||
|
for (var i = 1, a = 0; a < arguments.length; ++i, ++a)
|
||||||
|
args[i] = arguments[a];
|
||||||
|
process.nextTick.apply(null, args);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function callMakeAsyncCbNT(callback, args) {
|
|
||||||
callback.apply(null, args);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function onlookup(err, addresses) {
|
function onlookup(err, addresses) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return this.callback(errnoException(err, 'getaddrinfo', this.hostname));
|
return this.callback(errnoException(err, 'getaddrinfo', this.hostname));
|
||||||
|
46
lib/net.js
46
lib/net.js
@ -268,14 +268,10 @@ function writeAfterFIN(chunk, encoding, cb) {
|
|||||||
// TODO: defer error events consistently everywhere, not just the cb
|
// TODO: defer error events consistently everywhere, not just the cb
|
||||||
self.emit('error', er);
|
self.emit('error', er);
|
||||||
if (typeof cb === 'function') {
|
if (typeof cb === 'function') {
|
||||||
process.nextTick(writeAfterFINNT, cb, er);
|
process.nextTick(cb, er);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function writeAfterFINNT(cb, er) {
|
|
||||||
cb(er);
|
|
||||||
}
|
|
||||||
|
|
||||||
exports.Socket = Socket;
|
exports.Socket = Socket;
|
||||||
exports.Stream = Socket; // Legacy naming.
|
exports.Stream = Socket; // Legacy naming.
|
||||||
|
|
||||||
@ -442,9 +438,7 @@ Socket.prototype._destroy = function(exception, cb) {
|
|||||||
function fireErrorCallbacks() {
|
function fireErrorCallbacks() {
|
||||||
if (cb) cb(exception);
|
if (cb) cb(exception);
|
||||||
if (exception && !self._writableState.errorEmitted) {
|
if (exception && !self._writableState.errorEmitted) {
|
||||||
process.nextTick(function() {
|
process.nextTick(emitErrorNT, self, exception);
|
||||||
self.emit('error', exception);
|
|
||||||
});
|
|
||||||
self._writableState.errorEmitted = true;
|
self._writableState.errorEmitted = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -962,7 +956,10 @@ function lookupAndConnect(self, options) {
|
|||||||
// immediately calls net.Socket.connect() on it (that's us).
|
// immediately calls net.Socket.connect() on it (that's us).
|
||||||
// There are no event listeners registered yet so defer the
|
// There are no event listeners registered yet so defer the
|
||||||
// error event to the next tick.
|
// error event to the next tick.
|
||||||
process.nextTick(connectErrorNT, self, err, options);
|
err.host = options.host;
|
||||||
|
err.port = options.port;
|
||||||
|
err.message = err.message + ' ' + options.host + ':' + options.port;
|
||||||
|
process.nextTick(connectErrorNT, self, err);
|
||||||
} else {
|
} else {
|
||||||
self._unrefTimer();
|
self._unrefTimer();
|
||||||
connect(self,
|
connect(self,
|
||||||
@ -976,10 +973,7 @@ function lookupAndConnect(self, options) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function connectErrorNT(self, err, options) {
|
function connectErrorNT(self, err) {
|
||||||
err.host = options.host;
|
|
||||||
err.port = options.port;
|
|
||||||
err.message = err.message + ' ' + options.host + ':' + options.port;
|
|
||||||
self.emit('error', err);
|
self.emit('error', err);
|
||||||
self._destroy();
|
self._destroy();
|
||||||
}
|
}
|
||||||
@ -1205,9 +1199,7 @@ Server.prototype._listen2 = function(address, port, addressType, backlog, fd) {
|
|||||||
|
|
||||||
if (typeof rval === 'number') {
|
if (typeof rval === 'number') {
|
||||||
var error = exceptionWithHostPort(rval, 'listen', address, port);
|
var error = exceptionWithHostPort(rval, 'listen', address, port);
|
||||||
process.nextTick(function() {
|
process.nextTick(emitErrorNT, self, error);
|
||||||
self.emit('error', error);
|
|
||||||
});
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
self._handle = rval;
|
self._handle = rval;
|
||||||
@ -1222,9 +1214,7 @@ Server.prototype._listen2 = function(address, port, addressType, backlog, fd) {
|
|||||||
var ex = exceptionWithHostPort(err, 'listen', address, port);
|
var ex = exceptionWithHostPort(err, 'listen', address, port);
|
||||||
self._handle.close();
|
self._handle.close();
|
||||||
self._handle = null;
|
self._handle = null;
|
||||||
process.nextTick(function() {
|
process.nextTick(emitErrorNT, self, ex);
|
||||||
self.emit('error', ex);
|
|
||||||
});
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1239,6 +1229,11 @@ Server.prototype._listen2 = function(address, port, addressType, backlog, fd) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
function emitErrorNT(self, err) {
|
||||||
|
self.emit('error', err);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function emitListeningNT(self) {
|
function emitListeningNT(self) {
|
||||||
// ensure handle hasn't closed
|
// ensure handle hasn't closed
|
||||||
if (self._handle)
|
if (self._handle)
|
||||||
@ -1412,9 +1407,7 @@ function onconnection(err, clientHandle) {
|
|||||||
|
|
||||||
Server.prototype.getConnections = function(cb) {
|
Server.prototype.getConnections = function(cb) {
|
||||||
function end(err, connections) {
|
function end(err, connections) {
|
||||||
process.nextTick(function() {
|
process.nextTick(cb, err, connections);
|
||||||
cb(err, connections);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this._usingSlaves) {
|
if (!this._usingSlaves) {
|
||||||
@ -1493,11 +1486,14 @@ Server.prototype._emitCloseIfDrained = function() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
process.nextTick(function() {
|
process.nextTick(emitCloseNT, self);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
function emitCloseNT(self) {
|
||||||
debug('SERVER: emit close');
|
debug('SERVER: emit close');
|
||||||
self.emit('close');
|
self.emit('close');
|
||||||
});
|
}
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
Server.prototype.listenFD = util.deprecate(function(fd, type) {
|
Server.prototype.listenFD = util.deprecate(function(fd, type) {
|
||||||
|
@ -97,9 +97,7 @@ function listOnTimeout() {
|
|||||||
// when the timeout threw its exception.
|
// when the timeout threw its exception.
|
||||||
var oldDomain = process.domain;
|
var oldDomain = process.domain;
|
||||||
process.domain = null;
|
process.domain = null;
|
||||||
process.nextTick(function() {
|
process.nextTick(listOnTimeoutNT, list);
|
||||||
list[kOnTimeout]();
|
|
||||||
});
|
|
||||||
process.domain = oldDomain;
|
process.domain = oldDomain;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -113,6 +111,11 @@ function listOnTimeout() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function listOnTimeoutNT(list) {
|
||||||
|
list[kOnTimeout]();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
const unenroll = exports.unenroll = function(item) {
|
const unenroll = exports.unenroll = function(item) {
|
||||||
L.remove(item);
|
L.remove(item);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user