@@ -190,6 +190,12 @@ rb_gc_get_objspace(void)
190
190
return GET_VM ()-> objspace ;
191
191
}
192
192
193
+ void *
194
+ rb_gc_get_ractor_newobj_cache (void )
195
+ {
196
+ return GET_RACTOR ()-> newobj_cache ;
197
+ }
198
+
193
199
void
194
200
rb_gc_ractor_newobj_cache_foreach (void (* func )(void * cache , void * data ), void * data )
195
201
{
@@ -324,6 +330,41 @@ rb_gc_rebuild_shape(VALUE obj, size_t size_pool_id)
324
330
return (uint32_t )rb_shape_id (new_shape );
325
331
}
326
332
333
+ struct st_table * generic_ivtbl_get (void );
334
+
335
+ struct st_table *
336
+ rb_gc_get_generic_ivar_table (void )
337
+ {
338
+ return generic_ivtbl_get ();
339
+ }
340
+
341
+ struct st_table *
342
+ rb_gc_get_frozen_strings_table (void )
343
+ {
344
+ return rb_vm_fstring_table ();
345
+ }
346
+
347
+ extern rb_symbols_t ruby_global_symbols ;
348
+ #define global_symbols ruby_global_symbols
349
+
350
+ struct st_table *
351
+ rb_gc_get_global_symbols_table (void )
352
+ {
353
+ return global_symbols .str_sym ;
354
+ }
355
+
356
+ struct st_table *
357
+ rb_gc_get_overloaded_cme_table (void )
358
+ {
359
+ return GET_VM ()-> overloaded_cme_table ;
360
+ }
361
+
362
+ struct st_table *
363
+ rb_gc_get_ci_table (void )
364
+ {
365
+ return GET_VM ()-> ci_table ;
366
+ }
367
+
327
368
void rb_vm_update_references (void * ptr );
328
369
329
370
#define rb_setjmp (env ) RUBY_SETJMP(env)
@@ -577,7 +618,7 @@ typedef struct gc_function_map {
577
618
void * (* objspace_alloc )(void );
578
619
void (* objspace_init )(void * objspace_ptr );
579
620
void (* objspace_free )(void * objspace_ptr );
580
- void * (* ractor_cache_alloc )(void * objspace_ptr );
621
+ void * (* ractor_cache_alloc )(void * objspace_ptr , void * ractor );
581
622
void (* ractor_cache_free )(void * objspace_ptr , void * cache );
582
623
void (* set_params )(void * objspace_ptr );
583
624
void (* init )(void );
@@ -2421,8 +2462,7 @@ mark_const_table_i(VALUE value, void *objspace)
2421
2462
void
2422
2463
rb_gc_mark_roots (void * objspace , const char * * categoryp )
2423
2464
{
2424
- rb_execution_context_t * ec = GET_EC ();
2425
- rb_vm_t * vm = rb_ec_vm_ptr (ec );
2465
+ rb_vm_t * vm = GET_VM ();
2426
2466
2427
2467
#define MARK_CHECKPOINT (category ) do { \
2428
2468
if (categoryp) *categoryp = category; \
@@ -2432,9 +2472,6 @@ rb_gc_mark_roots(void *objspace, const char **categoryp)
2432
2472
rb_vm_mark (vm );
2433
2473
if (vm -> self ) rb_gc_impl_mark (objspace , vm -> self );
2434
2474
2435
- MARK_CHECKPOINT ("machine_context" );
2436
- mark_current_machine_context (objspace , ec );
2437
-
2438
2475
MARK_CHECKPOINT ("end_proc" );
2439
2476
rb_mark_end_proc ();
2440
2477
@@ -2451,6 +2488,17 @@ rb_gc_mark_roots(void *objspace, const char **categoryp)
2451
2488
#endif
2452
2489
2453
2490
MARK_CHECKPOINT ("finish" );
2491
+ }
2492
+
2493
+ void
2494
+ rb_gc_mark_thread_roots (void * objspace , void * ractor , const char * * categoryp )
2495
+ {
2496
+ if (ractor == NULL ) ractor = GET_RACTOR ();
2497
+
2498
+ rb_execution_context_t * ec = ((rb_ractor_t * )ractor )-> threads .running_ec ;
2499
+
2500
+ MARK_CHECKPOINT ("machine_context" );
2501
+ mark_current_machine_context (objspace , ec );
2454
2502
#undef MARK_CHECKPOINT
2455
2503
}
2456
2504
@@ -2736,9 +2784,9 @@ rb_obj_gc_flags(VALUE obj, ID* flags, size_t max)
2736
2784
/* GC */
2737
2785
2738
2786
void *
2739
- rb_gc_ractor_cache_alloc (void )
2787
+ rb_gc_ractor_cache_alloc (rb_ractor_t * ractor )
2740
2788
{
2741
- return rb_gc_impl_ractor_cache_alloc (rb_gc_get_objspace ());
2789
+ return rb_gc_impl_ractor_cache_alloc (rb_gc_get_objspace (), ractor );
2742
2790
}
2743
2791
2744
2792
void
0 commit comments