Skip to content

Commit 1fb3a51

Browse files
vtjnashstevengj
authored andcommitted
gc: simplify sweep_weak_refs logic (#56816)
[NFCI]
1 parent e3ec662 commit 1fb3a51

File tree

1 file changed

+8
-14
lines changed

1 file changed

+8
-14
lines changed

src/gc-stock.c

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -388,24 +388,18 @@ static void sweep_weak_refs(void)
388388
jl_ptls_t ptls2 = gc_all_tls_states[i];
389389
if (ptls2 != NULL) {
390390
size_t n = 0;
391-
size_t ndel = 0;
391+
size_t i = 0;
392392
size_t l = ptls2->gc_tls_common.heap.weak_refs.len;
393393
void **lst = ptls2->gc_tls_common.heap.weak_refs.items;
394-
if (l == 0)
395-
continue;
396-
while (1) {
397-
jl_weakref_t *wr = (jl_weakref_t*)lst[n];
398-
if (gc_marked(jl_astaggedvalue(wr)->bits.gc))
394+
// filter with preserving order
395+
for (i = 0; i < l; i++) {
396+
jl_weakref_t *wr = (jl_weakref_t*)lst[i];
397+
if (gc_marked(jl_astaggedvalue(wr)->bits.gc)) {
398+
lst[n] = wr;
399399
n++;
400-
else
401-
ndel++;
402-
if (n >= l - ndel)
403-
break;
404-
void *tmp = lst[n];
405-
lst[n] = lst[n + ndel];
406-
lst[n + ndel] = tmp;
400+
}
407401
}
408-
ptls2->gc_tls_common.heap.weak_refs.len -= ndel;
402+
ptls2->gc_tls_common.heap.weak_refs.len = n;
409403
}
410404
}
411405
}

0 commit comments

Comments
 (0)