@@ -346,9 +346,12 @@ MaybeLocal<Promise> FileHandle::ClosePromise() {
346346 EscapableHandleScope scope (isolate);
347347 Local<Context> context = env ()->context ();
348348
349- Local<Promise::Resolver> close_resolver = close_promise_.Get (isolate);
350- if (!close_resolver.IsEmpty ())
349+ Local<Value> close_resolver =
350+ object ()->GetInternalField (FileHandle::kClosingPromiseSlot );
351+ if (!close_resolver.IsEmpty () && !close_resolver->IsUndefined ()) {
352+ CHECK (close_resolver->IsPromise ());
351353 return close_resolver.As <Promise>();
354+ }
352355
353356 CHECK (!closed_);
354357 CHECK (!closing_);
@@ -365,7 +368,7 @@ MaybeLocal<Promise> FileHandle::ClosePromise() {
365368 return MaybeLocal<Promise>();
366369 }
367370 closing_ = true ;
368- close_promise_. Reset (isolate, resolver );
371+ object ()-> SetInternalField (FileHandle:: kClosingPromiseSlot , promise );
369372
370373 CloseReq* req = new CloseReq (env (), close_req_obj, promise, object ());
371374 auto AfterClose = uv_fs_callback_t {[](uv_fs_t * req) {
@@ -2542,7 +2545,7 @@ void Initialize(Local<Object> target,
25422545 env->SetProtoMethod (fd, " close" , FileHandle::Close);
25432546 env->SetProtoMethod (fd, " releaseFD" , FileHandle::ReleaseFD);
25442547 Local<ObjectTemplate> fdt = fd->InstanceTemplate ();
2545- fdt->SetInternalFieldCount (StreamBase ::kInternalFieldCount );
2548+ fdt->SetInternalFieldCount (FileHandle ::kInternalFieldCount );
25462549 StreamBase::AddMethods (env, fd);
25472550 env->SetConstructorFunction (target, " FileHandle" , fd);
25482551 env->set_fd_constructor_template (fdt);
0 commit comments