1
Fork 0
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:
Stefan Monnier 2017-11-01 13:36:58 -04:00
parent 27964af438
commit fdd3dcfa4e

View file

@ -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;