Skip to content
Closed
Changes from all commits
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
40 changes: 22 additions & 18 deletions src/cares_wrap.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1797,22 +1797,25 @@ static void Query(const FunctionCallbackInfo<Value>& args) {

Local<Object> req_wrap_obj = args[0].As<Object>();
Local<String> string = args[1].As<String>();
Wrap* wrap = new Wrap(channel, req_wrap_obj);
auto wrap = std::make_unique<Wrap>(channel, req_wrap_obj);

node::Utf8Value name(env->isolate(), string);
channel->ModifyActivityQueryCount(1);
int err = wrap->Send(*name);
if (err) {
channel->ModifyActivityQueryCount(-1);
delete wrap;
} else {
// Release ownership of the pointer allowing the ownership to be transferred
USE(wrap.release());
}

args.GetReturnValue().Set(err);
}


void AfterGetAddrInfo(uv_getaddrinfo_t* req, int status, struct addrinfo* res) {
GetAddrInfoReqWrap* req_wrap = static_cast<GetAddrInfoReqWrap*>(req->data);
std::unique_ptr<GetAddrInfoReqWrap> req_wrap {
static_cast<GetAddrInfoReqWrap*>(req->data)};
Environment* env = req_wrap->env();

HandleScope handle_scope(env->isolate());
Expand Down Expand Up @@ -1869,21 +1872,20 @@ void AfterGetAddrInfo(uv_getaddrinfo_t* req, int status, struct addrinfo* res) {
uv_freeaddrinfo(res);

TRACE_EVENT_NESTABLE_ASYNC_END2(
TRACING_CATEGORY_NODE2(dns, native), "lookup", req_wrap,
TRACING_CATEGORY_NODE2(dns, native), "lookup", req_wrap.get(),
"count", n, "verbatim", verbatim);

// Make the callback into JavaScript
req_wrap->MakeCallback(env->oncomplete_string(), arraysize(argv), argv);

delete req_wrap;
}


void AfterGetNameInfo(uv_getnameinfo_t* req,
int status,
const char* hostname,
const char* service) {
GetNameInfoReqWrap* req_wrap = static_cast<GetNameInfoReqWrap*>(req->data);
std::unique_ptr<GetNameInfoReqWrap> req_wrap {
static_cast<GetNameInfoReqWrap*>(req->data)};
Environment* env = req_wrap->env();

HandleScope handle_scope(env->isolate());
Expand All @@ -1904,14 +1906,12 @@ void AfterGetNameInfo(uv_getnameinfo_t* req,
}

TRACE_EVENT_NESTABLE_ASYNC_END2(
TRACING_CATEGORY_NODE2(dns, native), "lookupService", req_wrap,
TRACING_CATEGORY_NODE2(dns, native), "lookupService", req_wrap.get(),
"hostname", TRACE_STR_COPY(hostname),
"service", TRACE_STR_COPY(service));

// Make the callback into JavaScript
req_wrap->MakeCallback(env->oncomplete_string(), arraysize(argv), argv);

delete req_wrap;
}

using ParseIPResult = decltype(static_cast<ares_addr_port_node*>(0)->addr);
Expand Down Expand Up @@ -1971,7 +1971,9 @@ void GetAddrInfo(const FunctionCallbackInfo<Value>& args) {
CHECK(0 && "bad address family");
}

auto req_wrap = new GetAddrInfoReqWrap(env, req_wrap_obj, args[4]->IsTrue());
auto req_wrap = std::make_unique<GetAddrInfoReqWrap>(env,
req_wrap_obj,
args[4]->IsTrue());

struct addrinfo hints;
memset(&hints, 0, sizeof(struct addrinfo));
Expand All @@ -1980,7 +1982,7 @@ void GetAddrInfo(const FunctionCallbackInfo<Value>& args) {
hints.ai_flags = flags;

TRACE_EVENT_NESTABLE_ASYNC_BEGIN2(
TRACING_CATEGORY_NODE2(dns, native), "lookup", req_wrap,
TRACING_CATEGORY_NODE2(dns, native), "lookup", req_wrap.get(),
"hostname", TRACE_STR_COPY(*hostname),
"family",
family == AF_INET ? "ipv4" : family == AF_INET6 ? "ipv6" : "unspec");
Expand All @@ -1990,8 +1992,9 @@ void GetAddrInfo(const FunctionCallbackInfo<Value>& args) {
*hostname,
nullptr,
&hints);
if (err)
delete req_wrap;
if (err == 0)
// Release ownership of the pointer allowing the ownership to be transferred
USE(req_wrap.release());

args.GetReturnValue().Set(err);
}
Expand All @@ -2011,18 +2014,19 @@ void GetNameInfo(const FunctionCallbackInfo<Value>& args) {
CHECK(uv_ip4_addr(*ip, port, reinterpret_cast<sockaddr_in*>(&addr)) == 0 ||
uv_ip6_addr(*ip, port, reinterpret_cast<sockaddr_in6*>(&addr)) == 0);

GetNameInfoReqWrap* req_wrap = new GetNameInfoReqWrap(env, req_wrap_obj);
auto req_wrap = std::make_unique<GetNameInfoReqWrap>(env, req_wrap_obj);

TRACE_EVENT_NESTABLE_ASYNC_BEGIN2(
TRACING_CATEGORY_NODE2(dns, native), "lookupService", req_wrap,
TRACING_CATEGORY_NODE2(dns, native), "lookupService", req_wrap.get(),
"ip", TRACE_STR_COPY(*ip), "port", port);

int err = req_wrap->Dispatch(uv_getnameinfo,
AfterGetNameInfo,
reinterpret_cast<struct sockaddr*>(&addr),
NI_NAMEREQD);
if (err)
delete req_wrap;
if (err == 0)
// Release ownership of the pointer allowing the ownership to be transferred
USE(req_wrap.release());

args.GetReturnValue().Set(err);
}
Expand Down