File tree Expand file tree Collapse file tree 3 files changed +21
-24
lines changed Expand file tree Collapse file tree 3 files changed +21
-24
lines changed Original file line number Diff line number Diff line change @@ -6757,8 +6757,8 @@ added: v22.17.0
67576757
67586758> Stability: 1 - Experimental
67596759
6760- Calls ` dir .close ()` and returns a promise that fulfills when the
6761- dir is closed .
6760+ Calls ` dir .close ()` if the directory handle is open, and returns a promise that
6761+ fulfills when disposal is complete .
67626762
67636763#### ` dir[Symbol .Dispose ]()`
67646764
@@ -6768,7 +6768,8 @@ added: v22.17.0
67686768
67696769> Stability: 1 - Experimental
67706770
6771- Calls ` dir .closeSync ()` and returns ` undefined ` .
6771+ Calls ` dir .closeSync ()` if the directory handle is open, and returns
6772+ ` undefined ` .
67726773
67736774### Class: ` fs .Dirent `
67746775
Original file line number Diff line number Diff line change @@ -22,7 +22,6 @@ const {
2222
2323const { FSReqCallback } = binding ;
2424const {
25- assignFunctionName,
2625 promisify,
2726 SymbolAsyncDispose,
2827 SymbolDispose,
@@ -296,31 +295,24 @@ class Dir {
296295 await this . #closePromisified( ) ;
297296 }
298297 }
298+
299+ [ SymbolDispose ] ( ) {
300+ if ( this . #closed) return ;
301+ this . closeSync ( ) ;
302+ }
303+
304+ async [ SymbolAsyncDispose ] ( ) {
305+ if ( this . #closed) return ;
306+ await this . #closePromisified( ) ;
307+ }
299308}
300309
301- const nonEnumerableDescriptor = {
302- enumerable : false ,
303- writable : true ,
304- configurable : true ,
305- } ;
306310ObjectDefineProperties ( Dir . prototype , {
307- [ SymbolDispose ] : {
308- __proto__ : null ,
309- ...nonEnumerableDescriptor ,
310- value : assignFunctionName ( SymbolDispose , function ( ) {
311- this . closeSync ( ) ;
312- } ) ,
313- } ,
314- [ SymbolAsyncDispose ] : {
315- __proto__ : null ,
316- ...nonEnumerableDescriptor ,
317- value : assignFunctionName ( SymbolAsyncDispose , function ( ) {
318- this . close ( ) ;
319- } ) ,
320- } ,
321311 [ SymbolAsyncIterator ] : {
322312 __proto__ : null ,
323- ...nonEnumerableDescriptor ,
313+ enumerable : false ,
314+ writable : true ,
315+ configurable : true ,
324316 value : Dir . prototype . entries ,
325317 } ,
326318} ) ;
Original file line number Diff line number Diff line change @@ -11,10 +11,14 @@ async function explicitCall() {
1111
1212 const dh = await fs . opendir ( __dirname ) ;
1313 await dh [ Symbol . asyncDispose ] ( ) ;
14+ // Repeat invocations should not reject
15+ await dh [ Symbol . asyncDispose ] ( ) ;
1416 await assert . rejects ( dh . read ( ) , { code : 'ERR_DIR_CLOSED' } ) ;
1517
1618 const dhSync = opendirSync ( __dirname ) ;
1719 dhSync [ Symbol . dispose ] ( ) ;
20+ // Repeat invocations should not throw
21+ dhSync [ Symbol . dispose ] ( ) ;
1822 assert . throws ( ( ) => dhSync . readSync ( ) , { code : 'ERR_DIR_CLOSED' } ) ;
1923}
2024
You can’t perform that action at this time.
0 commit comments