* 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.redirect == SYMBOL_LOCALIZED
|
||||
/* Already freed? */
|
||||
&& !EQ (sym->s.function, Vdead))
|
||||
xfree (SYMBOL_BLV (&sym->s));
|
||||
if (sym->s.redirect == SYMBOL_LOCALIZED)
|
||||
{
|
||||
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;
|
||||
symbol_free_list = &sym->s;
|
||||
symbol_free_list->function = Vdead;
|
||||
|
|
Loading…
Add table
Reference in a new issue