Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
[squash] support opaque parameter
  • Loading branch information
AndreasMadsen committed Dec 19, 2017
commit 2b3db6e6a818ef404352d81b8c6f933401823ebd
23 changes: 11 additions & 12 deletions lib/dgram.js
Original file line number Diff line number Diff line change
Expand Up @@ -470,19 +470,18 @@ function doSend(ex, self, ip, list, address, port, callback) {
return;
}

var req = new SendWrap();
req.list = list; // Keep reference alive.
req.address = address;
req.port = port;
if (callback) {
req.callback = callback;
req.oncomplete = afterSend;
}
// node::SendWrap isn't instantiated and attached to the JS instance of
// SendWrap above until send() is called. So don't set the init trigger id
// until now.
var err = defaultTriggerAsyncIdScope(
self[async_id_symbol], function() {
self[async_id_symbol], [list, port, ip, callback],
function([list, port, ip, callback]) {
var req = new SendWrap();
req.list = list; // Keep reference alive.
req.address = address;
req.port = port;
if (callback) {
req.callback = callback;
req.oncomplete = afterSend;
}

return self._handle.send(req,
list,
list.length,
Expand Down
4 changes: 2 additions & 2 deletions lib/internal/async_hooks.js
Original file line number Diff line number Diff line change
Expand Up @@ -257,15 +257,15 @@ function getDefaultTriggerAsyncId() {
}


function defaultTriggerAsyncIdScope(triggerAsyncId, block) {
function defaultTriggerAsyncIdScope(triggerAsyncId, opaque, block) {
// CHECK(Number.isSafeInteger(triggerAsyncId))
// CHECK(triggerAsyncId > 0)
const oldDefaultTriggerAsyncId = async_id_fields[kDefaultTriggerAsyncId];
async_id_fields[kDefaultTriggerAsyncId] = triggerAsyncId;

var ret;
try {
ret = block();
ret = block(opaque);
} finally {
async_id_fields[kDefaultTriggerAsyncId] = oldDefaultTriggerAsyncId;
}
Expand Down
64 changes: 30 additions & 34 deletions lib/net.js
Original file line number Diff line number Diff line change
Expand Up @@ -298,14 +298,15 @@ function onSocketFinish() {
if (!this._handle || !this._handle.shutdown)
return this.destroy();

var req = new ShutdownWrap();
req.oncomplete = afterShutdown;
req.handle = this._handle;
// node::ShutdownWrap isn't instantiated and attached to the JS instance of
// ShutdownWrap above until shutdown() is called. So don't set the init
// trigger id until now.
var err = defaultTriggerAsyncIdScope(this[async_id_symbol],
() => this._handle.shutdown(req));
var err = defaultTriggerAsyncIdScope(
this[async_id_symbol], [this, afterShutdown],
function([self, afterShutdown]) {
var req = new ShutdownWrap();
req.oncomplete = afterShutdown;
req.handle = self._handle;
return self._handle.shutdown(req);
}
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you move this to a top-level function?

);

if (err)
return this.destroy(errnoException(err, 'shutdown'));
Expand Down Expand Up @@ -907,7 +908,7 @@ function checkBindError(err, port, handle) {


function internalConnect(
self, address, port, addressType, localAddress, localPort) {
[self, address, port, addressType, localAddress, localPort]) {
// TODO return promise from Socket.prototype.connect which
// wraps _connectReq.

Expand Down Expand Up @@ -945,26 +946,16 @@ function internalConnect(
req.localAddress = localAddress;
req.localPort = localPort;

// node::TCPConnectWrap isn't instantiated and attached to the JS instance
// of TCPConnectWrap above until connect() is called. So don't set the init
// trigger id until now.
defaultTriggerAsyncIdScope(self[async_id_symbol], function() {
if (addressType === 4)
err = self._handle.connect(req, address, port);
else
err = self._handle.connect6(req, address, port);
});

if (addressType === 4)
err = self._handle.connect(req, address, port);
else
err = self._handle.connect6(req, address, port);
} else {
const req = new PipeConnectWrap();
req.address = address;
req.oncomplete = afterConnect;
// node::PipeConnectWrap isn't instantiated and attached to the JS instance
// of PipeConnectWrap above until connect() is called. So don't set the
// init trigger id until now.
err = defaultTriggerAsyncIdScope(
self[async_id_symbol],
() => self._handle.connect(req, address, afterConnect));

err = self._handle.connect(req, address, afterConnect);
}

if (err) {
Expand Down Expand Up @@ -1032,7 +1023,9 @@ Socket.prototype.connect = function(...args) {
'string',
path);
}
internalConnect(this, path);
defaultTriggerAsyncIdScope(
this[async_id_symbol], [this, path], internalConnect
);
} else {
lookupAndConnect(this, options);
}
Expand Down Expand Up @@ -1075,7 +1068,11 @@ function lookupAndConnect(self, options) {
if (addressType) {
nextTick(self[async_id_symbol], function() {
if (self.connecting)
internalConnect(self, host, port, addressType, localAddress, localPort);
defaultTriggerAsyncIdScope(
self[async_id_symbol],
[self, host, port, addressType, localAddress, localPort],
internalConnect
);
});
return;
}
Expand All @@ -1099,7 +1096,7 @@ function lookupAndConnect(self, options) {
debug('connect: dns options', dnsopts);
self._host = host;
var lookup = options.lookup || dns.lookup;
defaultTriggerAsyncIdScope(self[async_id_symbol], function() {
defaultTriggerAsyncIdScope(self[async_id_symbol], null, function() {
lookup(host, dnsopts, function emitLookup(err, ip, addressType) {
self.emit('lookup', err, ip, addressType, host);

Expand All @@ -1119,12 +1116,11 @@ function lookupAndConnect(self, options) {
process.nextTick(connectErrorNT, self, err);
} else {
self._unrefTimer();
internalConnect(self,
ip,
port,
addressType,
localAddress,
localPort);
defaultTriggerAsyncIdScope(
self[async_id_symbol],
[self, ip, port, addressType, localAddress, localPort],
internalConnect
);
}
});
});
Expand Down