@@ -24,10 +24,6 @@ struct objspace {
2424 size_t total_gc_time ;
2525 size_t total_allocated_objects ;
2626
27- st_table * id_to_obj_tbl ;
28- st_table * obj_to_id_tbl ;
29- unsigned long long next_object_id ;
30-
3127 st_table * finalizer_table ;
3228 struct MMTk_final_job * finalizer_jobs ;
3329 rb_postponed_job_handle_t finalizer_postponed_job ;
@@ -227,8 +223,6 @@ rb_mmtk_scan_objspace(void)
227223 st_foreach (objspace -> finalizer_table , pin_value , (st_data_t )objspace );
228224 }
229225
230- st_foreach (objspace -> obj_to_id_tbl , gc_mark_tbl_no_pin_i , (st_data_t )objspace );
231-
232226 struct MMTk_final_job * job = objspace -> finalizer_jobs ;
233227 while (job != NULL ) {
234228 switch (job -> kind ) {
@@ -336,41 +330,6 @@ rb_mmtk_update_table_i(VALUE val, void *data)
336330 return ST_CONTINUE ;
337331}
338332
339- static int
340- rb_mmtk_update_obj_id_tables_obj_to_id_i (st_data_t key , st_data_t val , st_data_t data )
341- {
342- RUBY_ASSERT (RB_FL_TEST (key , FL_SEEN_OBJ_ID ));
343-
344- if (!mmtk_is_reachable ((MMTk_ObjectReference )key )) {
345- return ST_DELETE ;
346- }
347-
348- return ST_CONTINUE ;
349- }
350-
351- static int
352- rb_mmtk_update_obj_id_tables_id_to_obj_i (st_data_t key , st_data_t val , st_data_t data )
353- {
354- RUBY_ASSERT (RB_FL_TEST (val , FL_SEEN_OBJ_ID ));
355-
356- if (!mmtk_is_reachable ((MMTk_ObjectReference )val )) {
357- return ST_DELETE ;
358- }
359-
360- return ST_CONTINUE ;
361- }
362-
363- static void
364- rb_mmtk_update_obj_id_tables (void )
365- {
366- struct objspace * objspace = rb_gc_get_objspace ();
367-
368- st_foreach (objspace -> obj_to_id_tbl , rb_mmtk_update_obj_id_tables_obj_to_id_i , 0 );
369- if (objspace -> id_to_obj_tbl ) {
370- st_foreach (objspace -> id_to_obj_tbl , rb_mmtk_update_obj_id_tables_id_to_obj_i , 0 );
371- }
372- }
373-
374333static int
375334rb_mmtk_global_tables_count (void )
376335{
@@ -403,7 +362,6 @@ MMTk_RubyUpcalls ruby_upcalls = {
403362 rb_mmtk_update_global_tables ,
404363 rb_mmtk_global_tables_count ,
405364 rb_mmtk_update_finalizer_table ,
406- rb_mmtk_update_obj_id_tables ,
407365};
408366
409367// Use max 80% of the available memory by default for MMTk
@@ -432,7 +390,6 @@ rb_gc_impl_objspace_alloc(void)
432390 return calloc (1 , sizeof (struct objspace ));
433391}
434392
435- static void objspace_obj_id_init (struct objspace * objspace );
436393static void gc_run_finalizers (void * data );
437394
438395void
@@ -442,8 +399,6 @@ rb_gc_impl_objspace_init(void *objspace_ptr)
442399
443400 objspace -> measure_gc_time = true;
444401
445- objspace_obj_id_init (objspace );
446-
447402 objspace -> finalizer_table = st_init_numtable ();
448403 objspace -> finalizer_postponed_job = rb_postponed_job_preregister (0 , gc_run_finalizers , objspace );
449404
@@ -1069,111 +1024,6 @@ rb_gc_impl_shutdown_call_finalizer(void *objspace_ptr)
10691024 gc_run_finalizers (objspace );
10701025}
10711026
1072- // Object ID
1073- static int
1074- object_id_cmp (st_data_t x , st_data_t y )
1075- {
1076- if (RB_TYPE_P (x , T_BIGNUM )) {
1077- return !rb_big_eql (x , y );
1078- }
1079- else {
1080- return x != y ;
1081- }
1082- }
1083-
1084- static st_index_t
1085- object_id_hash (st_data_t n )
1086- {
1087- return FIX2LONG (rb_hash ((VALUE )n ));
1088- }
1089-
1090- #define OBJ_ID_INCREMENT (RUBY_IMMEDIATE_MASK + 1)
1091- #define OBJ_ID_INITIAL (OBJ_ID_INCREMENT)
1092-
1093- static const struct st_hash_type object_id_hash_type = {
1094- object_id_cmp ,
1095- object_id_hash ,
1096- };
1097-
1098- static void
1099- objspace_obj_id_init (struct objspace * objspace )
1100- {
1101- objspace -> id_to_obj_tbl = NULL ;
1102- objspace -> obj_to_id_tbl = st_init_numtable ();
1103- objspace -> next_object_id = OBJ_ID_INITIAL ;
1104- }
1105-
1106- VALUE
1107- rb_gc_impl_object_id (void * objspace_ptr , VALUE obj )
1108- {
1109- VALUE id ;
1110- struct objspace * objspace = objspace_ptr ;
1111-
1112- unsigned int lev = rb_gc_vm_lock ();
1113- if (FL_TEST (obj , FL_SEEN_OBJ_ID )) {
1114- st_data_t val ;
1115- if (st_lookup (objspace -> obj_to_id_tbl , (st_data_t )obj , & val )) {
1116- id = (VALUE )val ;
1117- }
1118- else {
1119- rb_bug ("rb_gc_impl_object_id: FL_SEEN_OBJ_ID flag set but not found in table" );
1120- }
1121- }
1122- else {
1123- RUBY_ASSERT (!st_lookup (objspace -> obj_to_id_tbl , (st_data_t )obj , NULL ));
1124-
1125- id = ULL2NUM (objspace -> next_object_id );
1126- objspace -> next_object_id += OBJ_ID_INCREMENT ;
1127-
1128- st_insert (objspace -> obj_to_id_tbl , (st_data_t )obj , (st_data_t )id );
1129- if (RB_UNLIKELY (objspace -> id_to_obj_tbl )) {
1130- st_insert (objspace -> id_to_obj_tbl , (st_data_t )id , (st_data_t )obj );
1131- }
1132- FL_SET (obj , FL_SEEN_OBJ_ID );
1133- }
1134- rb_gc_vm_unlock (lev );
1135-
1136- return id ;
1137- }
1138-
1139- static int
1140- build_id_to_obj_i (st_data_t key , st_data_t value , st_data_t data )
1141- {
1142- st_table * id_to_obj_tbl = (st_table * )data ;
1143- st_insert (id_to_obj_tbl , value , key );
1144- return ST_CONTINUE ;
1145- }
1146-
1147- VALUE
1148- rb_gc_impl_object_id_to_ref (void * objspace_ptr , VALUE object_id )
1149- {
1150- struct objspace * objspace = objspace_ptr ;
1151-
1152-
1153- unsigned int lev = rb_gc_vm_lock ();
1154-
1155- if (!objspace -> id_to_obj_tbl ) {
1156- objspace -> id_to_obj_tbl = st_init_table_with_size (& object_id_hash_type , st_table_size (objspace -> obj_to_id_tbl ));
1157- st_foreach (objspace -> obj_to_id_tbl , build_id_to_obj_i , (st_data_t )objspace -> id_to_obj_tbl );
1158- }
1159-
1160- VALUE obj ;
1161- bool found = st_lookup (objspace -> id_to_obj_tbl , object_id , & obj ) && !rb_gc_impl_garbage_object_p (objspace , obj );
1162-
1163- rb_gc_vm_unlock (lev );
1164-
1165- if (found ) {
1166- return obj ;
1167- }
1168-
1169- if (rb_funcall (object_id , rb_intern (">=" ), 1 , ULL2NUM (objspace -> next_object_id ))) {
1170- rb_raise (rb_eRangeError , "%+" PRIsVALUE " is not an id value" , rb_funcall (object_id , rb_intern ("to_s" ), 1 , INT2FIX (10 )));
1171- }
1172- else {
1173- rb_raise (rb_eRangeError , "%+" PRIsVALUE " is a recycled object" , rb_funcall (object_id , rb_intern ("to_s" ), 1 , INT2FIX (10 )));
1174- }
1175- }
1176-
11771027// Forking
11781028
11791029void
@@ -1364,7 +1214,7 @@ rb_gc_impl_object_metadata(void *objspace_ptr, VALUE obj)
13641214 n++; \
13651215} while (0)
13661216
1367- if (FL_TEST (obj , FL_SEEN_OBJ_ID )) SET_ENTRY (object_id , rb_obj_id (obj ));
1217+ if (rb_obj_id_p (obj )) SET_ENTRY (object_id , rb_obj_id (obj ));
13681218
13691219 object_metadata_entries [n ].name = 0 ;
13701220 object_metadata_entries [n ].val = 0 ;
0 commit comments