diff --git a/gdb/ChangeLog b/gdb/ChangeLog index aaf4b891ae..c7cf410131 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2017-06-19 Pedro Alves + + * dwarf2read.c (write_psymtabs_to_index): Construct file_closer + after gdb::unlinker. + 2017-06-19 Sergio Durigan Junior * mi/mi-cm-env.c (_initialize_mi_cmd_env): Use getenv instead of diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index abe14b25fd..2369d4b73b 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -23776,8 +23776,12 @@ write_psymtabs_to_index (struct objfile *objfile, const char *dir) if (!out_file) error (_("Can't open `%s' for writing"), filename.c_str ()); - file_closer close_out_file (out_file); + /* Order matters here; we want FILE to be closed before FILENAME is + unlinked, because on MS-Windows one cannot delete a file that is + still open. (Don't call anything here that might throw until + file_closer is created.) */ gdb::unlinker unlink_file (filename.c_str ()); + file_closer close_out_file (out_file); mapped_symtab symtab; data_buf cu_list;