Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nodejs/node.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnna Henningsen <anna@addaleax.net>2020-02-13 22:40:50 +0300
committerAnna Henningsen <anna@addaleax.net>2020-02-15 23:39:32 +0300
commita7c523e26df468782691c7e16b2e033c6256beb3 (patch)
tree33e01d937892b62c7b424ca4623b215b417d5567 /src/cares_wrap.cc
parent79296dc2d02c0b9872bbfcbb89148ea036a546d0 (diff)
src: prefer 3-argument Array::New()
This is nicer, because: 1. It reduces overall code size, 2. It’s faster, because `Object::Set()` calls are relatively slow, and 3. It helps avoid invalid `.Check()`/`.FromJust()` calls. PR-URL: https://github.com/nodejs/node/pull/31775 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: David Carlier <devnexen@gmail.com>
Diffstat (limited to 'src/cares_wrap.cc')
-rw-r--r--src/cares_wrap.cc30
1 files changed, 14 insertions, 16 deletions
diff --git a/src/cares_wrap.cc b/src/cares_wrap.cc
index f7a02e469aa..8eeaeddf830 100644
--- a/src/cares_wrap.cc
+++ b/src/cares_wrap.cc
@@ -749,16 +749,12 @@ Local<Array> AddrTTLToArray(Environment* env,
const T* addrttls,
size_t naddrttls) {
auto isolate = env->isolate();
- EscapableHandleScope escapable_handle_scope(isolate);
- auto context = env->context();
- Local<Array> ttls = Array::New(isolate, naddrttls);
- for (size_t i = 0; i < naddrttls; i++) {
- auto value = Integer::NewFromUnsigned(isolate, addrttls[i].ttl);
- ttls->Set(context, i, value).Check();
- }
+ MaybeStackBuffer<Local<Value>, 8> ttls(naddrttls);
+ for (size_t i = 0; i < naddrttls; i++)
+ ttls[i] = Integer::NewFromUnsigned(isolate, addrttls[i].ttl);
- return escapable_handle_scope.Escape(ttls);
+ return Array::New(isolate, ttls.out(), naddrttls);
}
@@ -2039,6 +2035,7 @@ void GetServers(const FunctionCallbackInfo<Value>& args) {
int r = ares_get_servers_ports(channel->cares_channel(), &servers);
CHECK_EQ(r, ARES_SUCCESS);
+ auto cleanup = OnScopeLeave([&]() { ares_free_data(servers); });
ares_addr_port_node* cur = servers;
@@ -2049,17 +2046,18 @@ void GetServers(const FunctionCallbackInfo<Value>& args) {
int err = uv_inet_ntop(cur->family, caddr, ip, sizeof(ip));
CHECK_EQ(err, 0);
- Local<Array> ret = Array::New(env->isolate(), 2);
- ret->Set(env->context(), 0, OneByteString(env->isolate(), ip)).Check();
- ret->Set(env->context(),
- 1,
- Integer::New(env->isolate(), cur->udp_port)).Check();
+ Local<Value> ret[] = {
+ OneByteString(env->isolate(), ip),
+ Integer::New(env->isolate(), cur->udp_port)
+ };
- server_array->Set(env->context(), i, ret).Check();
+ if (server_array->Set(env->context(), i,
+ Array::New(env->isolate(), ret, arraysize(ret)))
+ .IsNothing()) {
+ return;
+ }
}
- ares_free_data(servers);
-
args.GetReturnValue().Set(server_array);
}