Brandon Casey [off-list ref] writes:
From: Brandon Casey <redacted>
When the number of open packs exceeds pack_max_fds, unuse_one_window()
is called repeatedly to attempt to release the least-recently-used
pack windows, which, as a side-effect, will also close a pack file
after closing its last open window. If a pack file has been opened,
but no windows have been allocated into it, it will never be selected
by unuse_one_window() and hence its file descriptor will not be
closed. When this happens, git may exceed the number of file
descriptors permitted by the system.
An interesting find. The patch from a cursory look reads OK.
Thanks.
This is not likely to occur during upload-pack since upload-pack
reads each object from the pack so that it can peel tags and
advertise the exposed object.
Another interesting find. Perhaps there is a room for improvements,
as packed-refs file knows what objects the tags peel to? I vaguely
recall Peff was actively reducing the object access during ref
enumeration in not so distant past...