mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-26 09:08:59 +00:00
Fix potential infinite loop in bfd_cache_close_all.
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.
This commit is contained in:
@@ -1,3 +1,10 @@
|
||||
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.
|
||||
|
||||
15
bfd/cache.c
15
bfd/cache.c
@@ -546,7 +546,9 @@ SYNOPSIS
|
||||
|
||||
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.
|
||||
@@ -558,7 +560,16 @@ bfd_cache_close_all (void)
|
||||
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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user