(sweep_weak_hash_tables): Fix the code taking unmarked
tables out of the list of all weak hash tables.
This commit is contained in:
parent
ff3d95733d
commit
ac0e96eefc
2 changed files with 15 additions and 15 deletions
|
@ -1,5 +1,8 @@
|
|||
2000-08-07 Gerd Moellmann <gerd@gnu.org>
|
||||
|
||||
* fns.c (sweep_weak_hash_tables): Fix the code taking unmarked
|
||||
tables out of the list of all weak hash tables.
|
||||
|
||||
* xdisp.c (ensure_echo_area_buffers): If a buffer was killed, and
|
||||
a new buffer is created, make sure echo_area_buffer[] references
|
||||
the new buffer.
|
||||
|
|
27
src/fns.c
27
src/fns.c
|
@ -4380,8 +4380,8 @@ sweep_weak_table (h, remove_entries_p)
|
|||
void
|
||||
sweep_weak_hash_tables ()
|
||||
{
|
||||
Lisp_Object table;
|
||||
struct Lisp_Hash_Table *h, *prev;
|
||||
Lisp_Object table, used, next;
|
||||
struct Lisp_Hash_Table *h;
|
||||
int marked;
|
||||
|
||||
/* Mark all keys and values that are in use. Keep on marking until
|
||||
|
@ -4403,27 +4403,24 @@ sweep_weak_hash_tables ()
|
|||
while (marked);
|
||||
|
||||
/* Remove tables and entries that aren't used. */
|
||||
prev = NULL;
|
||||
for (table = Vweak_hash_tables; !GC_NILP (table); table = h->next_weak)
|
||||
for (table = Vweak_hash_tables, used = Qnil; !GC_NILP (table); table = next)
|
||||
{
|
||||
prev = h;
|
||||
h = XHASH_TABLE (table);
|
||||
|
||||
next = h->next_weak;
|
||||
|
||||
if (h->size & ARRAY_MARK_FLAG)
|
||||
{
|
||||
/* TABLE is marked as used. Sweep its contents. */
|
||||
if (XFASTINT (h->count) > 0)
|
||||
sweep_weak_table (h, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Table is not marked, and will thus be freed.
|
||||
Take it out of the list of weak hash tables. */
|
||||
if (prev)
|
||||
prev->next_weak = h->next_weak;
|
||||
else
|
||||
Vweak_hash_tables = h->next_weak;
|
||||
|
||||
/* Add table to the list of used weak hash tables. */
|
||||
h->next_weak = used;
|
||||
used = table;
|
||||
}
|
||||
}
|
||||
|
||||
Vweak_hash_tables = used;
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue