summaryrefslogtreecommitdiff
path: root/src/async_wrap.cc
diff options
context:
space:
mode:
authorGerhard Stoebich <18708370+Flarna@users.noreply.github.com>2019-05-05 21:29:32 +0200
committerAnna Henningsen <anna@addaleax.net>2019-05-19 23:17:06 +0200
commit3d9d1ade2a361f408b116c5bafb2fcd560310f9c (patch)
tree7d0eb2feb0652bc9cf4609df6b1a437ea824303a /src/async_wrap.cc
parentee59763ab3b67f8792ed53a4d098212a040994f9 (diff)
downloadandroid-node-v8-3d9d1ade2a361f408b116c5bafb2fcd560310f9c.tar.gz
android-node-v8-3d9d1ade2a361f408b116c5bafb2fcd560310f9c.tar.bz2
android-node-v8-3d9d1ade2a361f408b116c5bafb2fcd560310f9c.zip
async_hooks: don't reuse resource in HttpAgent
As discussed in https://github.com/nodejs/diagnostics/issues/248, https://github.com/nodejs/node/pull/21313 and https://docs.google.com/document/d/1g8OrG5lMIUhRn1zbkutgY83MiTSMx-0NHDs8Bf-nXxM/preview reusing the resource object is a blocker for landing a resource based async hooks API and get rid of the promise destroy hook. This PR ensures that HttpAgent uses the a new resource object in case the socket handle gets reused. PR-URL: https://github.com/nodejs/node/pull/27581 Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Rich Trott <rtrott@gmail.com>
Diffstat (limited to 'src/async_wrap.cc')
-rw-r--r--src/async_wrap.cc18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/async_wrap.cc b/src/async_wrap.cc
index 8cb30a6f6a..e11ce07681 100644
--- a/src/async_wrap.cc
+++ b/src/async_wrap.cc
@@ -410,13 +410,26 @@ void AsyncWrap::PopAsyncIds(const FunctionCallbackInfo<Value>& args) {
void AsyncWrap::AsyncReset(const FunctionCallbackInfo<Value>& args) {
+ CHECK(args[0]->IsObject());
+
AsyncWrap* wrap;
ASSIGN_OR_RETURN_UNWRAP(&wrap, args.Holder());
+
+ Local<Object> resource = args[0].As<Object>();
double execution_async_id =
- args[0]->IsNumber() ? args[0].As<Number>()->Value() : kInvalidAsyncId;
- wrap->AsyncReset(execution_async_id);
+ args[1]->IsNumber() ? args[1].As<Number>()->Value() : kInvalidAsyncId;
+ wrap->AsyncReset(resource, execution_async_id);
}
+
+void AsyncWrap::GetProviderType(const FunctionCallbackInfo<Value>& args) {
+ AsyncWrap* wrap;
+ args.GetReturnValue().Set(AsyncWrap::PROVIDER_NONE);
+ ASSIGN_OR_RETURN_UNWRAP(&wrap, args.Holder());
+ args.GetReturnValue().Set(wrap->provider_type());
+}
+
+
void AsyncWrap::EmitDestroy() {
AsyncWrap::EmitDestroy(env(), async_id_);
// Ensure no double destroy is emitted via AsyncReset().
@@ -437,6 +450,7 @@ Local<FunctionTemplate> AsyncWrap::GetConstructorTemplate(Environment* env) {
tmpl->SetClassName(FIXED_ONE_BYTE_STRING(env->isolate(), "AsyncWrap"));
env->SetProtoMethod(tmpl, "getAsyncId", AsyncWrap::GetAsyncId);
env->SetProtoMethod(tmpl, "asyncReset", AsyncWrap::AsyncReset);
+ env->SetProtoMethod(tmpl, "getProviderType", AsyncWrap::GetProviderType);
env->set_async_wrap_ctor_template(tmpl);
}
return tmpl;