summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2020-03-23 21:36:09 +0100
committerLudovic Courtès <ludo@gnu.org>2020-03-23 22:49:47 +0100
commit02e3dc6ab95fe51786b68a8200322e163f8da478 (patch)
tree385df694e9114e1e47c7fbae98bf7c4c849b260b
parent168ad279e6bb4be0393a0a23943af535925767fb (diff)
downloadguile-02e3dc6ab95fe51786b68a8200322e163f8da478.tar.gz
Ensure weak sets are occasionally vacuumed.
Just like in dc8dda77e0c937abae42a76ea88c6e7995adbd9a, this ensures weak sets are vacuumed in a timely fashion. It also works around the fact that 'vacuum_all_weak_tables' isn't getting called more than a couple of times, for some reason. Partly fixes <https://bugs.gnu.org/40194>. * libguile/weak-set.c (weak_set_add_x): When 'set->items > set->upper', call 'vacuum_weak_set'.
-rw-r--r--libguile/weak-set.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/libguile/weak-set.c b/libguile/weak-set.c
index 8cf1b8286..e71af9a7d 100644
--- a/libguile/weak-set.c
+++ b/libguile/weak-set.c
@@ -563,6 +563,7 @@ weak_set_add_x (scm_t_weak_set *set, unsigned long hash,
if (set->n_items > set->upper)
/* Full set, time to resize. */
{
+ vacuum_weak_set (set);
resize_set (set);
return weak_set_add_x (set, hash >> 1, pred, closure, obj);
}