Skip to content

Commit 727b291

Browse files
committed
src,dns: refactor cares_wrap to avoid global state
PR-URL: #14518 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Tobias Nießen <[email protected]>
1 parent cee8d6d commit 727b291

File tree

6 files changed

+253
-221
lines changed

6 files changed

+253
-221
lines changed

lib/dns.js

+14-11
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,16 @@ const internalNet = require('internal/net');
2929
const { customPromisifyArgs } = require('internal/util');
3030
const errors = require('internal/errors');
3131

32-
const GetAddrInfoReqWrap = cares.GetAddrInfoReqWrap;
33-
const GetNameInfoReqWrap = cares.GetNameInfoReqWrap;
34-
const QueryReqWrap = cares.QueryReqWrap;
32+
const {
33+
GetAddrInfoReqWrap,
34+
GetNameInfoReqWrap,
35+
QueryReqWrap,
36+
ChannelWrap,
37+
isIP
38+
} = cares;
39+
40+
const defaultChannel = new ChannelWrap();
3541

36-
const isIP = cares.isIP;
3742
const isLegalPort = internalNet.isLegalPort;
3843

3944

@@ -241,8 +246,6 @@ function onresolve(err, result, ttls) {
241246

242247

243248
function resolver(bindingName) {
244-
var binding = cares[bindingName];
245-
246249
return function query(name, /* options, */ callback) {
247250
var options;
248251
if (arguments.length > 2) {
@@ -263,7 +266,7 @@ function resolver(bindingName) {
263266
req.hostname = name;
264267
req.oncomplete = onresolve;
265268
req.ttl = !!(options && options.ttl);
266-
var err = binding(req, name);
269+
var err = defaultChannel[bindingName](req, name);
267270
if (err) throw errnoException(err, bindingName);
268271
return req;
269272
};
@@ -305,7 +308,7 @@ function resolve(hostname, rrtype, callback) {
305308

306309

307310
function getServers() {
308-
const ret = cares.getServers();
311+
const ret = defaultChannel.getServers();
309312
return ret.map((val) => {
310313
if (!val[1] || val[1] === IANA_DNS_PORT) return val[0];
311314

@@ -318,7 +321,7 @@ function getServers() {
318321
function setServers(servers) {
319322
// cache the original servers because in the event of an error setting the
320323
// servers cares won't have any servers available for resolution
321-
const orig = cares.getServers();
324+
const orig = defaultChannel.getServers();
322325
const newSet = [];
323326
const IPv6RE = /\[(.*)\]/;
324327
const addrSplitRE = /(^.+?)(?::(\d+))?$/;
@@ -350,11 +353,11 @@ function setServers(servers) {
350353
throw new errors.Error('ERR_INVALID_IP_ADDRESS', serv);
351354
});
352355

353-
const errorNumber = cares.setServers(newSet);
356+
const errorNumber = defaultChannel.setServers(newSet);
354357

355358
if (errorNumber !== 0) {
356359
// reset the servers to the old servers, because ares probably unset them
357-
cares.setServers(orig.join(','));
360+
defaultChannel.setServers(orig.join(','));
358361

359362
var err = cares.strerror(errorNumber);
360363
throw new errors.Error('ERR_DNS_SET_SERVERS_FAILED', err, servers);

src/async-wrap.h

+1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ namespace node {
3535

3636
#define NODE_ASYNC_NON_CRYPTO_PROVIDER_TYPES(V) \
3737
V(NONE) \
38+
V(DNSCHANNEL) \
3839
V(FSEVENTWRAP) \
3940
V(FSREQWRAP) \
4041
V(GETADDRINFOREQWRAP) \

0 commit comments

Comments
 (0)