@@ -346,9 +346,12 @@ MaybeLocal<Promise> FileHandle::ClosePromise() {
346
346
EscapableHandleScope scope (isolate);
347
347
Local<Context> context = env ()->context ();
348
348
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 ());
351
353
return close_resolver.As <Promise>();
354
+ }
352
355
353
356
CHECK (!closed_);
354
357
CHECK (!closing_);
@@ -365,7 +368,7 @@ MaybeLocal<Promise> FileHandle::ClosePromise() {
365
368
return MaybeLocal<Promise>();
366
369
}
367
370
closing_ = true ;
368
- close_promise_. Reset (isolate, resolver );
371
+ object ()-> SetInternalField (FileHandle:: kClosingPromiseSlot , promise );
369
372
370
373
CloseReq* req = new CloseReq (env (), close_req_obj, promise, object ());
371
374
auto AfterClose = uv_fs_callback_t {[](uv_fs_t * req) {
@@ -2542,7 +2545,7 @@ void Initialize(Local<Object> target,
2542
2545
env->SetProtoMethod (fd, " close" , FileHandle::Close);
2543
2546
env->SetProtoMethod (fd, " releaseFD" , FileHandle::ReleaseFD);
2544
2547
Local<ObjectTemplate> fdt = fd->InstanceTemplate ();
2545
- fdt->SetInternalFieldCount (StreamBase ::kInternalFieldCount );
2548
+ fdt->SetInternalFieldCount (FileHandle ::kInternalFieldCount );
2546
2549
StreamBase::AddMethods (env, fd);
2547
2550
env->SetConstructorFunction (target, " FileHandle" , fd);
2548
2551
env->set_fd_constructor_template (fdt);
0 commit comments