[patch lto]: PR/47241 GCC part
Kai Tietz
ktietz70@googlemail.com
Wed Feb 9 19:16:00 GMT 2011
Hello,
As for windows native targets unlink isn't possible on still opened files, it is
important to prevent dangling file-descriptors, which are closed not
until application's
exit.
2011-02-09 Kai Tietz
PR lto/47241
* lto.c (lto_read_section_data): Free
fd_name in failure case.
For mingw targets don't hash file-descriptor.
(read_cgraph_and_symbols): Close current_lto_file
in failure case.
Tested for x86_64-pc-linux-gnu, and x86_64-w64-mingw32. Ok for apply?
Regards,
Kai
--
| (\_/) This is Bunny. Copy and paste
| (='.'=) Bunny into your signature to help
| (")_(") him gain world domination
-------------- next part --------------
Index: gcc/gcc/lto/lto.c
===================================================================
--- gcc.orig/gcc/lto/lto.c 2011-01-11 20:36:21.000000000 +0100
+++ gcc/gcc/lto/lto.c 2011-02-09 20:02:40.291549900 +0100
@@ -593,7 +593,11 @@ lto_read_section_data (struct lto_file_d
fd_name = xstrdup (file_data->file_name);
fd = open (file_data->file_name, O_RDONLY|O_BINARY);
if (fd == -1)
- return NULL;
+ {
+ free (fd_name);
+ fd_name = NULL;
+ return NULL;
+ }
}
#if LTO_MMAP_IO
@@ -619,9 +623,17 @@ lto_read_section_data (struct lto_file_d
|| read (fd, result, len) != (ssize_t) len)
{
free (result);
- return NULL;
+ result = NULL;
}
-
+#ifdef __MINGW32__
+ /* Native windows doesn't supports delayed unlink on opened file. So
+ We close file here again. This produces higher I/O load, but at least
+ it prevents to have dangling file handles preventing unlink. */
+ free (fd_name);
+ fd_name = NULL;
+ close (fd);
+ fd = -1;
+#endif
return result;
#endif
}
@@ -2147,7 +2159,11 @@ read_cgraph_and_symbols (unsigned nfiles
file_data = lto_file_read (current_lto_file, resolution, &count);
if (!file_data)
- break;
+ {
+ lto_obj_file_close (current_lto_file);
+ current_lto_file = NULL;
+ break;
+ }
decl_data[last_file_ix++] = file_data;
More information about the Gcc-patches
mailing list