gold patch committed: Add file descriptor cache
Ian Lance Taylor
iant@google.com
Fri Jul 25 04:28:00 GMT 2008
PR 5990 is about the fact that gold never actually closes any file
descriptors. I committed this patch to add a file descriptor cache.
Now if a call to open fails with EMFILE or ENFILE, gold will back off
on the number of open descriptors. It should now work correctly,
albeit less efficiently, as long as it can five or so descriptors
open.
Ian
PR 5990
* descriptors.cc: New file.
* descriptors.h: New file.
* gold-threads.h (class Hold_optional_lock): New class.
* fileread.cc: Include "descriptors.h".
(File_read::~File_read): Release descriptor rather than closing
it.
(File_read::open) [file]: Call open_descriptor rather than open.
Set is_descriptor_opened_.
(File_read::open) [memory]: Assert that descriptor is not open.
(File_read::reopen_descriptor): New function.
(File_read::release): Release descriptor.
(File_read::do_read): Make non-const. Reopen descriptor.
(File_read::read): Make non-const.
(File_read::make_view): Reopen descriptor.
(File_read::do_readv): Likewise.
* fileread.h (class File_read): Add is_descriptor_opened_ field.
Update declarations.
* layout.cc: Include "descriptors.h".
(Layout::create_build_id): Use open_descriptor rather than open.
* output.cc: Include "descriptors.h".
(Output_file::open): Use open_descriptor rather than open.
* archive.cc (Archive::const_iterator): Change Archive to be
non-const.
(Archive::begin, Archive::end): Make non-const.
(Archive::count_members): Likewise.
* archive.h (class Archive): Update declarations.
* object.h (Object::read): Make non-const.
* Makefile.am (CCFILES): Add descriptors.cc.
(HFILES): Add descriptors.h.
* Makefile.in: Rebuild.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: foo.patch
Type: text/x-patch
Size: 23113 bytes
Desc: Add file descriptor cache
URL: <https://sourceware.org/pipermail/binutils/attachments/20080725/bed5cb07/attachment.bin>
More information about the Binutils
mailing list