summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog9
-rw-r--r--hash.c2
2 files changed, 10 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 1a9afc59..e79a1d2d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
2011-11-30 Kaz Kylheku <kaz@kylheku.com>
+ * hash.c (hash_process_weak): Fix regression caused by a mistake
+ in the the 2010-01-26 commit, prior to release 033. When processing a
+ table with weak values, this function was mistakenly testing the keys
+ rather than values for for reachability. I noticed this when a test
+ case that should run in constant memory showed unwarranted accumulation
+ of memory.
+
+2011-11-30 Kaz Kylheku <kaz@kylheku.com>
+
* eval.c (op_modplace): Bugfix: conflation of new value and
increment value. Separate new value and increment value, and check
number of arguments.
diff --git a/hash.c b/hash.c
index 618acc75..c2dee744 100644
--- a/hash.c
+++ b/hash.c
@@ -455,7 +455,7 @@ void hash_process_weak(void)
for (iter = pchain; !gc_is_reachable(*iter); ) {
val entry = car(*iter);
- if (!gc_is_reachable(entry) && !gc_is_reachable(car(entry)))
+ if (!gc_is_reachable(entry) && !gc_is_reachable(cdr(entry)))
*iter = cdr(*iter);
else
iter = cdr_l(*iter);