+2023-08-04 Nick Clifton <nickc@redhat.com>
+
+ PR 15545
+ * cache.c (bfd_cache_close_all): Extend description to note that
+ all files will be closed, even those that are not cacheable.
+ Add code to prevent a possible infinite loop.
+
2023-08-02 Tom Tromey <tromey@adacore.com>
* pei-x86_64.c (PEI_HEADERS): Do not define.
DESCRIPTION
Remove all BFDs from the cache. If the attached file is open,
- then close it too.
+ then close it too. Note - despite its name this function will
+ close a BFD even if it is not marked as being cacheable, ie
+ even if bfd_get_cacheable() returns false.
<<FALSE>> is returned if closing one of the file fails, <<TRUE>> is
returned if all is well.
bool ret = true;
while (bfd_last_cache != NULL)
- ret &= bfd_cache_close (bfd_last_cache);
+ {
+ bfd *prev_bfd_last_cache = bfd_last_cache;
+
+ ret &= bfd_cache_close (bfd_last_cache);
+
+ /* Stop a potential infinite loop should bfd_cache_close()
+ not update bfd_last_cache. */
+ if (bfd_last_cache == prev_bfd_last_cache)
+ break;
+ }
return ret;
}