[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] emacs-26 fdd3dcf: * src/alloc.c (sweep_symbols): Tweak las
From: |
Stefan Monnier |
Subject: |
[Emacs-diffs] emacs-26 fdd3dcf: * src/alloc.c (sweep_symbols): Tweak last change |
Date: |
Thu, 2 Nov 2017 10:02:23 -0400 (EDT) |
branch: emacs-26
commit fdd3dcfa4eb0a4b17bb43f461a6790f68e76da41
Author: Stefan Monnier <address@hidden>
Commit: Stefan Monnier <address@hidden>
* src/alloc.c (sweep_symbols): Tweak last change
Avoid the double-free without the extra check. Add an explanatory comment.
---
src/alloc.c | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/src/alloc.c b/src/alloc.c
index 11afdfd..3f4ec16 100644
--- a/src/alloc.c
+++ b/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;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] emacs-26 fdd3dcf: * src/alloc.c (sweep_symbols): Tweak last change,
Stefan Monnier <=