repair for locked-object handling and multiply-locked values
Weak pairs, ephemeron pairs, some symbols, and some ports were handled incorerctly when locked multiple times. original commit: 847fc1c84496f67cd363c8411d0023339f4d6246
This commit is contained in:
parent
2f4d59de0f
commit
502b0b5f50
4
c/gc.c
4
c/gc.c
|
@ -2213,8 +2213,10 @@ static void sanitize_locked_segment(seginfo *si) {
|
|||
/* Zero out unused memory */
|
||||
while (pp < ppend) {
|
||||
if ((ls != Snil) && (pp == UNTYPE_ANY(Scar(ls)))) {
|
||||
ptr a = Scar(ls);
|
||||
pp = (ptr *)((uptr)pp + size_object(Scar(ls)));
|
||||
ls = Scdr(ls);
|
||||
while ((ls != Snil) && (Scar(ls) == a))
|
||||
ls = Scdr(ls);
|
||||
} else {
|
||||
*pp = FIX(0);
|
||||
pp++;
|
||||
|
|
|
@ -3562,6 +3562,7 @@
|
|||
(vector-set! v (sub1 N) p)
|
||||
(collect 0)
|
||||
(set-car! p 'yes)
|
||||
(unlock-object v)
|
||||
(equal? '(yes . 2) (vector-ref v (sub1 N)))))
|
||||
)
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user