Skip to content

Printing backtrace will leak PDB file handles #470

Open
@andylizi

Description

@andylizi

backtrace-rs uses StackWalkEx on Windows, which calls SymLoadModuleEx in turn. The symbol modules are never unloaded afterward, keeping the PDB files open until the process exits.

Normally this wouldn't be an issue, since most programs exit on panic anyway. But it's causing rust-lang/rust-analyzer#9932, where when a proc macro panics in rust-analyzer, it locks the PDB file and making subsequent build attempts fail:

note: LINK : fatal error LNK1201: error writing to program database 'target\debug\deps***_derive-fd4461955b1f812b.pdb';
check for insufficient disk space, invalid path, or insufficient privilege

Steps to reproduce

// Run with `RUST_BACKTRACE=1`
fn main() {
    let _ = std::panic::catch_unwind(|| panic!());
    loop { std::thread::park(); }
}

process-modules
procmon

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions