From 145db71f8874c385c38402394592d251de1d140d Mon Sep 17 00:00:00 2001 From: Diogo Netto Date: Thu, 9 Feb 2023 16:59:46 -0300 Subject: [PATCH] steal from all at the end --- src/gc.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/gc.c b/src/gc.c index b9d7588251661..127c7d6d3cc68 100644 --- a/src/gc.c +++ b/src/gc.c @@ -2582,7 +2582,6 @@ void gc_mark_loop_worker(jl_ptls_t ptls) goto pop; } steal : { - // Steal from a random victim for (int i = 0; i < 2 * gc_n_threads; i++) { uint32_t v = cong(UINT64_MAX, UINT64_MAX, &ptls->rngseed) % gc_n_threads; jl_gc_markqueue_t *mq2 = &gc_all_tls_states[v]->mark_queue; @@ -2590,6 +2589,12 @@ void gc_mark_loop_worker(jl_ptls_t ptls) if (new_obj != NULL) goto mark; } + for (int i = 0; i < gc_n_threads; i++) { + jl_gc_markqueue_t *mq2 = &gc_all_tls_states[i]->mark_queue; + new_obj = gc_markqueue_steal_from(mq2); + if (new_obj != NULL) + goto mark; + } } gc_drain_own_chunkqueue(ptls, mq); jl_atomic_fetch_add(&gc_n_threads_marking, -1);