Skip to content

fs.rmdirSync stuck in busy-loop on Windows #34580

Closed
@darkk

Description

@darkk
  • Version: v12.18.3
  • Platform: Windows 10, 64-bit, Version 10.0.17763.1339
  • Subsystem: fs

What steps will reproduce the bug?

const fs = require('fs');
const { tmpdir } = require('os');
const { join } = require('path');

function rmdirRecursiveSync() {
  const root = fs.mkdtempSync(join(tmpdir(), 'fs-'));

  const middle = join(root, 'middle');
  fs.mkdirSync(middle);
  fs.mkdirSync(join(middle, 'leaf')); // make `middle` non-empty
  fs.chmodSync(middle, 0);

  fs.rmdirSync(root, { recursive: true });
}

rmdirRecursiveSync();

How often does it reproduce? Is there a required condition?

The bug reliably reprodices on windows.

What is the expected behavior?

I expect fs.rmdirSync() to fail the same way as fs.rmdir() does. But it does not.

Linux produces expected behavior throwing an error:

Error: EACCES: permission denied, scandir '/tmp/fs-0wJvqH/middle'
    at readdirSync (fs.js:948:3)
    at _rmdirSync (internal/fs/rimraf.js:242:7)
    at rimrafSync (internal/fs/rimraf.js:191:7)
    at internal/fs/rimraf.js:245:9
    at Array.forEach (<anonymous>)
    at _rmdirSync (internal/fs/rimraf.js:242:45)
    at rimrafSync (internal/fs/rimraf.js:191:7)
    at Object.rmdirSync (fs.js:838:12)
    at rmdirRecursiveSync (/…/rmdirRecursiveSync.js:13:6)
    at Object.<anonymous> (/…/rmdirRecursiveSync.js:16:1) {
  errno: -13,
  syscall: 'scandir',
  code: 'EACCES',
  path: '/tmp/fs-0wJvqH/middle'
}

Windows async fs.rmdir({recursive:true}) instead of fs.rmdirSync() gives expected behavior as well, it passes an error to the callback:

[Error: EPERM: operation not permitted, rmdir 'C:\…\Temp\fs-vJZvJ7\middle'] {
  errno: -4048,
  code: 'EPERM',
  syscall: 'rmdir',
  path: 'C:\\…\\Temp\\fs-vJZvJ7\\middle'
}

What do you see instead?

Node process is stuck with 100%-CPU busy-loop.

Additional information

Process Monitor suggests a busy-loop while endlessly retrying to delete a file, the log excerpt is pasted below:

"Time of Day","Operation","Path","Result","Detail"
...
"2:02:16.0518106 PM","SetDispositionInformationFile","C:\…\Temp\fs-Y3XBJk\middle\leaf","CANNOT DELETE","Delete: True"
"2:02:16.0518663 PM","CloseFile","C:\…\Temp\fs-Y3XBJk\middle\leaf","SUCCESS",""
"2:02:16.0527830 PM","CreateFile","C:\…\Temp\fs-Y3XBJk\middle\leaf","SUCCESS","Desired Access: Read Data/List Directory, Read Attributes, Synchronize, Disposition: Open, Options: Synchronous IO Non-Alert, Open For Backup, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened"
"2:02:16.0528985 PM","QueryDirectory","C:\…\Temp\fs-Y3XBJk\middle\leaf","SUCCESS","0: ., 1: .., FileInformationClass: FileDirectoryInformation"
"2:02:16.0529916 PM","QueryDirectory","C:\…\Temp\fs-Y3XBJk\middle\leaf","NO MORE FILES",""
"2:02:16.0530399 PM","CloseFile","C:\…\Temp\fs-Y3XBJk\middle\leaf","SUCCESS",""
"2:02:16.0543568 PM","CreateFile","C:\…\Temp\fs-Y3XBJk\middle\leaf","SUCCESS","Desired Access: Read Attributes, Synchronize, Disposition: Open, Options: Synchronous IO Non-Alert, Open For Backup, Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened"
"2:02:16.0544702 PM","QueryAllInformationFile","C:\…\Temp\fs-Y3XBJk\middle\leaf","BUFFER OVERFLOW","CreationTime: 7/31/2020 12:40:00 PM, LastAccessTime: 7/31/2020 2:02:14 PM, LastWriteTime: 7/31/2020 12:40:00 PM, ChangeTime: 7/31/2020 12:40:00 PM, FileAttributes: RD, AllocationSize: 0, EndOfFile: 0, NumberOfLinks: 1, DeletePending: False, Directory: True, IndexNumber: 0x100000007cc38, EaSize: 0, Access: Read Attributes, Synchronize, Position: 0, Mode: Synchronous IO Non-Alert, AlignmentRequirement: Word"
"2:02:16.0545350 PM","QueryInformationVolume","C:\…\Temp\fs-Y3XBJk\middle\leaf","BUFFER OVERFLOW","VolumeCreationTime: 3/19/2019 10:40:48 PM, VolumeSerialNumber: B4A6-FEC6, SupportsObjects: True, VolumeLabel: WinǴ"
"2:02:16.0545884 PM","CloseFile","C:\…\Temp\fs-Y3XBJk\middle\leaf","SUCCESS",""
"2:02:16.0554352 PM","CreateFile","C:\…\Temp\fs-Y3XBJk\middle\leaf","SUCCESS","Desired Access: Read Attributes, Delete, Synchronize, Disposition: Open, Options: Directory, Synchronous IO Non-Alert, Open For Backup, Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened"
"2:02:16.0555403 PM","QueryAttributeTagFile","C:\…\Temp\fs-Y3XBJk\middle\leaf","SUCCESS","Attributes: RD, ReparseTag: 0x0"
"2:02:16.0555972 PM","SetDispositionInformationFile","C:\…\Temp\fs-Y3XBJk\middle\leaf","CANNOT DELETE","Delete: True"
"2:02:16.0557121 PM","CloseFile","C:\…\Temp\fs-Y3XBJk\middle\leaf","SUCCESS",""
"2:02:16.0565707 PM","CreateFile","C:\…\Temp\fs-Y3XBJk\middle\leaf","SUCCESS","Desired Access: Read Data/List Directory, Read Attributes, Synchronize, Disposition: Open, Options: Synchronous IO Non-Alert, Open For Backup, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened"
"2:02:16.0566833 PM","QueryDirectory","C:\…\Temp\fs-Y3XBJk\middle\leaf","SUCCESS","0: ., 1: .., FileInformationClass: FileDirectoryInformation"
"2:02:16.0568326 PM","QueryDirectory","C:\…\Temp\fs-Y3XBJk\middle\leaf","NO MORE FILES",""
"2:02:16.0569022 PM","CloseFile","C:\…\Temp\fs-Y3XBJk\middle\leaf","SUCCESS",""
"2:02:16.0572185 PM","CreateFile","C:\…\Temp\fs-Y3XBJk\middle\leaf","SUCCESS","Desired Access: Read Attributes, Synchronize, Disposition: Open, Options: Synchronous IO Non-Alert, Open For Backup, Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened"
"2:02:16.0573269 PM","QueryAllInformationFile","C:\…\Temp\fs-Y3XBJk\middle\leaf","BUFFER OVERFLOW","CreationTime: 7/31/2020 12:40:00 PM, LastAccessTime: 7/31/2020 2:02:14 PM, LastWriteTime: 7/31/2020 12:40:00 PM, ChangeTime: 7/31/2020 12:40:00 PM, FileAttributes: RD, AllocationSize: 0, EndOfFile: 0, NumberOfLinks: 1, DeletePending: False, Directory: True, IndexNumber: 0x100000007cc38, EaSize: 0, Access: Read Attributes, Synchronize, Position: 0, Mode: Synchronous IO Non-Alert, AlignmentRequirement: Word"
"2:02:16.0573616 PM","QueryInformationVolume","C:\…\Temp\fs-Y3XBJk\middle\leaf","BUFFER OVERFLOW","VolumeCreationTime: 3/19/2019 10:40:48 PM, VolumeSerialNumber: B4A6-FEC6, SupportsObjects: True, VolumeLabel: WinǴ"
"2:02:16.0573888 PM","CloseFile","C:\…\Temp\fs-Y3XBJk\middle\leaf","SUCCESS",""
"2:02:16.0576180 PM","CreateFile","C:\…\Temp\fs-Y3XBJk\middle\leaf","SUCCESS","Desired Access: Read Attributes, Delete, Synchronize, Disposition: Open, Options: Directory, Synchronous IO Non-Alert, Open For Backup, Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened"
"2:02:16.0576756 PM","QueryAttributeTagFile","C:\…\Temp\fs-Y3XBJk\middle\leaf","SUCCESS","Attributes: RD, ReparseTag: 0x0"
"2:02:16.0577024 PM","SetDispositionInformationFile","C:\…\Temp\fs-Y3XBJk\middle\leaf","CANNOT DELETE","Delete: True"
...

Metadata

Metadata

Assignees

No one assigned

    Labels

    confirmed-bugIssues with confirmed bugs.fsIssues and PRs related to the fs subsystem / file system.windowsIssues and PRs related to the Windows platform.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions