@@ -214,12 +214,13 @@ void AsyncWrap::WeakCallback(const WeakCallbackInfo<DestroyParam>& info) {
214214
215215 p->env ->RemoveCleanupHook (DestroyParamCleanupHook, p.get ());
216216
217- if (!prop_bag->Get (p->env ->context (), p->env ->destroyed_string ())
217+ if (!prop_bag.IsEmpty () &&
218+ !prop_bag->Get (p->env ->context (), p->env ->destroyed_string ())
218219 .ToLocal (&val)) {
219220 return ;
220221 }
221222
222- if (val->IsFalse ()) {
223+ if (val. IsEmpty () || val ->IsFalse ()) {
223224 AsyncWrap::EmitDestroy (p->env , p->asyncId );
224225 }
225226 // unique_ptr goes out of scope here and pointer is deleted.
@@ -229,14 +230,16 @@ void AsyncWrap::WeakCallback(const WeakCallbackInfo<DestroyParam>& info) {
229230static void RegisterDestroyHook (const FunctionCallbackInfo<Value>& args) {
230231 CHECK (args[0 ]->IsObject ());
231232 CHECK (args[1 ]->IsNumber ());
232- CHECK (args[2 ]->IsObject ());
233+ CHECK (args. Length () == 2 || args [2 ]->IsObject ());
233234
234235 Isolate* isolate = args.GetIsolate ();
235236 DestroyParam* p = new DestroyParam ();
236237 p->asyncId = args[1 ].As <Number>()->Value ();
237238 p->env = Environment::GetCurrent (args);
238239 p->target .Reset (isolate, args[0 ].As <Object>());
239- p->propBag .Reset (isolate, args[2 ].As <Object>());
240+ if (args.Length () > 2 ) {
241+ p->propBag .Reset (isolate, args[2 ].As <Object>());
242+ }
240243 p->target .SetWeak (p, AsyncWrap::WeakCallback, WeakCallbackType::kParameter );
241244 p->env ->AddCleanupHook (DestroyParamCleanupHook, p);
242245}
0 commit comments