Skip to content

Commit 93deb2a

Browse files
committed
Change order of dequeue
1 parent 7154e7c commit 93deb2a

1 file changed

Lines changed: 12 additions & 11 deletions

File tree

gc/default/default.c

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5628,7 +5628,17 @@ gc_sweep_finish(rb_objspace_t *objspace)
56285628
static struct heap_page *
56295629
gc_sweep_dequeue_page(rb_objspace_t *objspace, rb_heap_t *heap, bool free_in_user_thread, bool *dequeued_unswept_page)
56305630
{
5631-
/* 1) Local drain cache from a previous bulk grab. */
5631+
/* 1) Resume an outstanding claimed range. */
5632+
if (heap->claimed_local_start < heap->claimed_local_end) {
5633+
GC_ASSERT(heap->claimed_local_end <= rb_darray_size(heap->sweep_pages));
5634+
GC_ASSERT(heap->claimed_local_start < rb_darray_size(heap->sweep_pages));
5635+
struct heap_page *page = heap->sweep_pages->data[heap->claimed_local_start++];
5636+
*dequeued_unswept_page = true;
5637+
psweep_debug(0, "[gc] gc_sweep_dequeue_page: got claimed page:%p (heap %ld)\n", page, heap - heaps);
5638+
return page;
5639+
}
5640+
5641+
/* 2) Local drain cache from a previous bulk grab. */
56325642
retry:
56335643
if (heap->drained_local) {
56345644
struct heap_page *page = heap->drained_local;
@@ -5640,19 +5650,10 @@ gc_sweep_dequeue_page(rb_objspace_t *objspace, rb_heap_t *heap, bool free_in_use
56405650
}
56415651
retry_drain:
56425652

5643-
/* 2) Bulk-drain the worker's pre-swept stack with one xchg. */
5653+
/* 3) Bulk-drain the worker's pre-swept stack with one xchg. */
56445654
heap->drained_local = sweep_stack_drain(heap);
56455655
if (heap->drained_local) goto retry;
56465656

5647-
/* 3) Resume an outstanding claimed range. */
5648-
if (heap->claimed_local_start < heap->claimed_local_end) {
5649-
GC_ASSERT(heap->claimed_local_end <= rb_darray_size(heap->sweep_pages));
5650-
GC_ASSERT(heap->claimed_local_start < rb_darray_size(heap->sweep_pages));
5651-
struct heap_page *page = heap->sweep_pages->data[heap->claimed_local_start++];
5652-
*dequeued_unswept_page = true;
5653-
psweep_debug(0, "[gc] gc_sweep_dequeue_page: got claimed page:%p (heap %ld)\n", page, heap - heaps);
5654-
return page;
5655-
}
56565657

56575658
/* 4) Claim a fresh chunk. */
56585659
if (sweep_claim_chunk(heap, &heap->claimed_local_start, &heap->claimed_local_end, SWEEP_CHUNK, false)) {

0 commit comments

Comments
 (0)