Skip to content

Commit bc39bdd

Browse files
committed
domain: use AsyncListener API
The domain module has been switched over to use the domain module API as much as currently possible. There are still some hooks in the EventEmitter, but hopefully we can remove those in the future.
1 parent fbe7eec commit bc39bdd

15 files changed

Lines changed: 261 additions & 603 deletions

lib/_http_client.js

Lines changed: 35 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -417,38 +417,45 @@ function responseOnEnd() {
417417
}
418418
}
419419

420+
function tickOnSocket(req, socket) {
421+
var parser = parsers.alloc();
422+
req.socket = socket;
423+
req.connection = socket;
424+
parser.reinitialize(HTTPParser.RESPONSE);
425+
parser.socket = socket;
426+
parser.incoming = null;
427+
req.parser = parser;
428+
429+
socket.parser = parser;
430+
socket._httpMessage = req;
431+
432+
// Setup "drain" propogation.
433+
httpSocketSetup(socket);
434+
435+
// Propagate headers limit from request object to parser
436+
if (util.isNumber(req.maxHeadersCount)) {
437+
parser.maxHeaderPairs = req.maxHeadersCount << 1;
438+
} else {
439+
// Set default value because parser may be reused from FreeList
440+
parser.maxHeaderPairs = 2000;
441+
}
442+
443+
parser.onIncoming = parserOnIncomingClient;
444+
socket.on('error', socketErrorListener);
445+
socket.on('data', socketOnData);
446+
socket.on('end', socketOnEnd);
447+
socket.on('close', socketCloseListener);
448+
req.emit('socket', socket);
449+
}
450+
420451
ClientRequest.prototype.onSocket = function(socket) {
421452
var req = this;
422453

423454
process.nextTick(function() {
424-
var parser = parsers.alloc();
425-
req.socket = socket;
426-
req.connection = socket;
427-
parser.reinitialize(HTTPParser.RESPONSE);
428-
parser.socket = socket;
429-
parser.incoming = null;
430-
req.parser = parser;
431-
432-
socket.parser = parser;
433-
socket._httpMessage = req;
434-
435-
// Setup "drain" propogation.
436-
httpSocketSetup(socket);
437-
438-
// Propagate headers limit from request object to parser
439-
if (util.isNumber(req.maxHeadersCount)) {
440-
parser.maxHeaderPairs = req.maxHeadersCount << 1;
441-
} else {
442-
// Set default value because parser may be reused from FreeList
443-
parser.maxHeaderPairs = 2000;
444-
}
445-
446-
parser.onIncoming = parserOnIncomingClient;
447-
socket.on('error', socketErrorListener);
448-
socket.on('data', socketOnData);
449-
socket.on('end', socketOnEnd);
450-
socket.on('close', socketCloseListener);
451-
req.emit('socket', socket);
455+
// If a domain was added to the request, attach it to the socket.
456+
if (req.domain)
457+
socket._handle.addAsyncListener(req.domain._listener);
458+
tickOnSocket(req, socket);
452459
});
453460

454461
};

0 commit comments

Comments
 (0)