mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-06 06:20:55 -08:00
* src/alloc.c (sweep_symbols): Tweak last change
Avoid the double-free without the extra check. Add an explanatory comment.
This commit is contained in:
parent
27964af438
commit
fdd3dcfa4e
1 changed files with 10 additions and 4 deletions
14
src/alloc.c
14
src/alloc.c
|
|
@ -7024,10 +7024,16 @@ sweep_symbols (void)
|
||||||
{
|
{
|
||||||
if (!sym->s.gcmarkbit)
|
if (!sym->s.gcmarkbit)
|
||||||
{
|
{
|
||||||
if (sym->s.redirect == SYMBOL_LOCALIZED
|
if (sym->s.redirect == SYMBOL_LOCALIZED)
|
||||||
/* Already freed? */
|
{
|
||||||
&& !EQ (sym->s.function, Vdead))
|
xfree (SYMBOL_BLV (&sym->s));
|
||||||
xfree (SYMBOL_BLV (&sym->s));
|
/* At every GC we sweep all symbol_blocks and rebuild the
|
||||||
|
symbol_free_list, so those symbols which stayed unused
|
||||||
|
between the two will be re-swept.
|
||||||
|
So we have to make sure we don't re-free this blv next
|
||||||
|
time we sweep this symbol_block (bug#29066). */
|
||||||
|
sym->s.redirect == SYMBOL_PLAINVAL;
|
||||||
|
}
|
||||||
sym->s.next = symbol_free_list;
|
sym->s.next = symbol_free_list;
|
||||||
symbol_free_list = &sym->s;
|
symbol_free_list = &sym->s;
|
||||||
symbol_free_list->function = Vdead;
|
symbol_free_list->function = Vdead;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue