From: Pedro Alves Date: Mon, 19 Jun 2017 11:46:47 +0000 (+0100) Subject: .gdb_index writer: close the file before unlinking it X-Git-Tag: binutils-2_29~226 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=16b7a7199881fa26fc863279bbf08741e5674b5d;p=external%2Fbinutils.git .gdb_index writer: close the file before unlinking it We should close the file before unlinking because on MS-Windows one cannot delete a file that is still open. I considered making 'gdb::unlinker::unlinker(const char *)' 'noexcept(true)' and then adding static_assert (noexcept (gdb::unlinker (filename.c_str ())), ""); but that doesn't really work because gdb::unlinker has a gdb_assert, which can throw a QUIT if/when the assertion fails. 'noexcept(true)' would cause GDB to abruptly terminate if/when the assertion fails. gdb/ChangeLog: 2017-06-19 Pedro Alves * dwarf2read.c (write_psymtabs_to_index): Construct file_closer after gdb::unlinker. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index aaf4b89..c7cf410 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 abe14b2..2369d4b 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;