Skip to content

Commit 8082532

Browse files
committed
Fix rb_mmtk_number_of_mutators
It previously returns the number of threads, including cached threads not executing Ruby code. That is inconsistent with the number of mutators returned from rb_mmtk_get_mutators. This commit reimplementa rb_mmtk_number_of_mutators with rb_mmtk_get_mutators to ensure they see the same number of mutators. Fixes: mmtk/mmtk-ruby#84
1 parent 1d3f798 commit 8082532

File tree

1 file changed

+18
-11
lines changed

1 file changed

+18
-11
lines changed

mmtk_support.c

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1525,17 +1525,6 @@ rb_mmtk_block_for_gc(MMTk_VMMutatorThread tls)
15251525
#endif
15261526
}
15271527

1528-
static size_t
1529-
rb_mmtk_number_of_mutators(void)
1530-
{
1531-
rb_mmtk_assert_mmtk_worker();
1532-
rb_mmtk_panic_if_multiple_ractor(__FUNCTION__);
1533-
1534-
rb_ractor_t *main_ractor = GET_VM()->ractor.main_ractor;
1535-
size_t num_threads = main_ractor->threads.cnt;
1536-
return num_threads;
1537-
}
1538-
15391528
static void
15401529
rb_mmtk_get_mutators(void (*visit_mutator)(MMTk_Mutator *mutator, void *data), void *data)
15411530
{
@@ -1557,6 +1546,24 @@ rb_mmtk_get_mutators(void (*visit_mutator)(MMTk_Mutator *mutator, void *data), v
15571546
}
15581547
}
15591548

1549+
static void
1550+
increment_mutator_counter(MMTk_Mutator *mutator, void *data)
1551+
{
1552+
size_t *counter = (size_t*)data;
1553+
(*counter)++;
1554+
}
1555+
1556+
static size_t
1557+
rb_mmtk_number_of_mutators(void)
1558+
{
1559+
rb_mmtk_assert_mmtk_worker();
1560+
rb_mmtk_panic_if_multiple_ractor(__FUNCTION__);
1561+
1562+
size_t counter = 0;
1563+
rb_mmtk_get_mutators(increment_mutator_counter, (void*)&counter);
1564+
return counter;
1565+
}
1566+
15601567
static void
15611568
rb_mmtk_scan_roots_in_mutator_thread(MMTk_VMMutatorThread mutator, MMTk_VMWorkerThread worker)
15621569
{

0 commit comments

Comments
 (0)