Skip to content

Commit 106a23b

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 7b96944 commit 106a23b

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
@@ -28,11 +28,16 @@ const uv = process.binding('uv');
2828
const internalNet = require('internal/net');
2929
const { customPromisifyArgs } = require('internal/util');
3030

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

35-
const isIP = cares.isIP;
3641
const isLegalPort = internalNet.isLegalPort;
3742

3843

@@ -240,8 +245,6 @@ function onresolve(err, result, ttls) {
240245

241246

242247
function resolver(bindingName) {
243-
var binding = cares[bindingName];
244-
245248
return function query(name, /* options, */ callback) {
246249
var options;
247250
if (arguments.length > 2) {
@@ -261,7 +264,7 @@ function resolver(bindingName) {
261264
req.hostname = name;
262265
req.oncomplete = onresolve;
263266
req.ttl = !!(options && options.ttl);
264-
var err = binding(req, name);
267+
var err = defaultChannel[bindingName](req, name);
265268
if (err) throw errnoException(err, bindingName);
266269
return req;
267270
};
@@ -303,7 +306,7 @@ function resolve(hostname, type_, callback_) {
303306

304307

305308
function getServers() {
306-
const ret = cares.getServers();
309+
const ret = defaultChannel.getServers();
307310
return ret.map((val) => {
308311
if (!val[1] || val[1] === IANA_DNS_PORT) return val[0];
309312

@@ -316,7 +319,7 @@ function getServers() {
316319
function setServers(servers) {
317320
// cache the original servers because in the event of an error setting the
318321
// servers cares won't have any servers available for resolution
319-
const orig = cares.getServers();
322+
const orig = defaultChannel.getServers();
320323
const newSet = [];
321324
const IPv6RE = /\[(.*)\]/;
322325
const addrSplitRE = /(^.+?)(?::(\d+))?$/;
@@ -348,11 +351,11 @@ function setServers(servers) {
348351
throw new Error(`IP address is not properly formatted: ${serv}`);
349352
});
350353

351-
const errorNumber = cares.setServers(newSet);
354+
const errorNumber = defaultChannel.setServers(newSet);
352355

353356
if (errorNumber !== 0) {
354357
// reset the servers to the old servers, because ares probably unset them
355-
cares.setServers(orig.join(','));
358+
defaultChannel.setServers(orig.join(','));
356359

357360
var err = cares.strerror(errorNumber);
358361
throw new Error(`c-ares failed to set servers: "${err}" [${servers}]`);

src/async-wrap.h

+1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ namespace node {
3636

3737
#define NODE_ASYNC_NON_CRYPTO_PROVIDER_TYPES(V) \
3838
V(NONE) \
39+
V(DNSCHANNEL) \
3940
V(FSEVENTWRAP) \
4041
V(FSREQWRAP) \
4142
V(GETADDRINFOREQWRAP) \

0 commit comments

Comments
 (0)