From aa8655a0da2f5ca7937e5d73ee0c83afa464e8f3 Mon Sep 17 00:00:00 2001 From: Matt Sergeant Date: Wed, 5 Jul 2017 14:58:02 +0200 Subject: [PATCH] async-hooks,net: ensure asyncId=null if no handle If the .listen() hasn't been called on the server, there is no handle object. In this case use null as the triggerAsyncId. Fixes: https://github.com/nodejs/node/issues/13548 PR-URL: https://github.com/nodejs/node/pull/13938 Reviewed-By: James M Snell Reviewed-By: Refael Ackermann Reviewed-By: Trevor Norris Reviewed-By: Andreas Madsen --- lib/net.js | 3 ++- test/async-hooks/test-net-get-connections.js | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 test/async-hooks/test-net-get-connections.js diff --git a/lib/net.js b/lib/net.js index 5f4eec89ec8..5129a596421 100644 --- a/lib/net.js +++ b/lib/net.js @@ -1558,7 +1558,8 @@ Server.prototype.getConnections = function(cb) { const self = this; function end(err, connections) { - nextTick(self[async_id_symbol], cb, err, connections); + const asyncId = self._handle ? self[async_id_symbol] : null; + nextTick(asyncId, cb, err, connections); } if (!this._usingSlaves) { diff --git a/test/async-hooks/test-net-get-connections.js b/test/async-hooks/test-net-get-connections.js new file mode 100644 index 00000000000..56e1c5f38b3 --- /dev/null +++ b/test/async-hooks/test-net-get-connections.js @@ -0,0 +1,11 @@ +'use strict'; + +const common = require('../common'); +const net = require('net'); +const server = net.createServer(); + +// This test was based on an error raised by Haraka. +// It caused server.getConnections to raise an exception. +// Ref: https://github.com/haraka/Haraka/pull/1951 + +server.getConnections(common.mustCall());