Compile debugging code for stress to class always

This commit is contained in:
Nobuyoshi Nakada 2023-06-28 22:03:03 +09:00
parent 7a0a218dff
commit 5204ad56e1
No known key found for this signature in database
GPG Key ID: 3582D74E1FEE4465
2 changed files with 11 additions and 13 deletions

View File

@ -181,7 +181,7 @@ jobs:
# - { name: DEBUG_INTEGER_PACK, env: { cppflags: '-DDEBUG_INTEGER_PACK' } } # - { name: DEBUG_INTEGER_PACK, env: { cppflags: '-DDEBUG_INTEGER_PACK' } }
# - { name: ENABLE_PATH_CHECK, env: { cppflags: '-DENABLE_PATH_CHECK' } } # - { name: ENABLE_PATH_CHECK, env: { cppflags: '-DENABLE_PATH_CHECK' } }
- { name: GC_DEBUG_STRESS_TO_CLASS, env: { cppflags: '-DGC_DEBUG_STRESS_TO_CLASS' } } # - { name: GC_DEBUG_STRESS_TO_CLASS, env: { cppflags: '-DGC_DEBUG_STRESS_TO_CLASS' } }
# - { name: GC_ENABLE_LAZY_SWEEP=0, env: { cppflags: '-DGC_ENABLE_LAZY_SWEEP=0' } } # - { name: GC_ENABLE_LAZY_SWEEP=0, env: { cppflags: '-DGC_ENABLE_LAZY_SWEEP=0' } }
# - { name: GC_PROFILE_DETAIL_MEMOTY, env: { cppflags: '-DGC_PROFILE_DETAIL_MEMOTY' } } # - { name: GC_PROFILE_DETAIL_MEMOTY, env: { cppflags: '-DGC_PROFILE_DETAIL_MEMOTY' } }
# - { name: GC_PROFILE_MORE_DETAIL, env: { cppflags: '-DGC_PROFILE_MORE_DETAIL' } } # - { name: GC_PROFILE_MORE_DETAIL, env: { cppflags: '-DGC_PROFILE_MORE_DETAIL' } }

18
gc.c
View File

@ -492,7 +492,7 @@ int ruby_rgengc_debug;
#endif #endif
#ifndef GC_DEBUG_STRESS_TO_CLASS #ifndef GC_DEBUG_STRESS_TO_CLASS
#define GC_DEBUG_STRESS_TO_CLASS 0 #define GC_DEBUG_STRESS_TO_CLASS RUBY_DEBUG
#endif #endif
#ifndef RGENGC_OBJ_INFO #ifndef RGENGC_OBJ_INFO
@ -1044,8 +1044,10 @@ VALUE *ruby_initial_gc_stress_ptr = &ruby_initial_gc_stress;
#define ruby_gc_stress_mode objspace->gc_stress_mode #define ruby_gc_stress_mode objspace->gc_stress_mode
#if GC_DEBUG_STRESS_TO_CLASS #if GC_DEBUG_STRESS_TO_CLASS
#define stress_to_class objspace->stress_to_class #define stress_to_class objspace->stress_to_class
#define set_stress_to_class(c) (stress_to_class = (c))
#else #else
#define stress_to_class 0 #define stress_to_class (objspace, 0)
#define set_stress_to_class(c) (objspace, (c))
#endif #endif
#if 0 #if 0
@ -2845,14 +2847,12 @@ newobj_of0(VALUE klass, VALUE flags, int wb_protected, rb_ractor_t *cr, size_t a
RB_DEBUG_COUNTER_INC(obj_newobj); RB_DEBUG_COUNTER_INC(obj_newobj);
(void)RB_DEBUG_COUNTER_INC_IF(obj_newobj_wb_unprotected, !wb_protected); (void)RB_DEBUG_COUNTER_INC_IF(obj_newobj_wb_unprotected, !wb_protected);
#if GC_DEBUG_STRESS_TO_CLASS
if (UNLIKELY(stress_to_class)) { if (UNLIKELY(stress_to_class)) {
long i, cnt = RARRAY_LEN(stress_to_class); long i, cnt = RARRAY_LEN(stress_to_class);
for (i = 0; i < cnt; ++i) { for (i = 0; i < cnt; ++i) {
if (klass == RARRAY_AREF(stress_to_class, i)) rb_memerror(); if (klass == RARRAY_AREF(stress_to_class, i)) rb_memerror();
} }
} }
#endif
size_t size_pool_idx = size_pool_idx_for_size(alloc_size); size_t size_pool_idx = size_pool_idx_for_size(alloc_size);
@ -13805,7 +13805,6 @@ rb_gcdebug_sentinel(VALUE obj, const char *name)
#endif /* GC_DEBUG */ #endif /* GC_DEBUG */
#if GC_DEBUG_STRESS_TO_CLASS
/* /*
* call-seq: * call-seq:
* GC.add_stress_to_class(class[, ...]) * GC.add_stress_to_class(class[, ...])
@ -13819,7 +13818,7 @@ rb_gcdebug_add_stress_to_class(int argc, VALUE *argv, VALUE self)
rb_objspace_t *objspace = &rb_objspace; rb_objspace_t *objspace = &rb_objspace;
if (!stress_to_class) { if (!stress_to_class) {
stress_to_class = rb_ary_hidden_new(argc); set_stress_to_class(rb_ary_hidden_new(argc));
} }
rb_ary_cat(stress_to_class, argv, argc); rb_ary_cat(stress_to_class, argv, argc);
return self; return self;
@ -13844,12 +13843,11 @@ rb_gcdebug_remove_stress_to_class(int argc, VALUE *argv, VALUE self)
rb_ary_delete_same(stress_to_class, argv[i]); rb_ary_delete_same(stress_to_class, argv[i]);
} }
if (RARRAY_LEN(stress_to_class) == 0) { if (RARRAY_LEN(stress_to_class) == 0) {
stress_to_class = 0; set_stress_to_class(0);
} }
} }
return Qnil; return Qnil;
} }
#endif
/* /*
* Document-module: ObjectSpace * Document-module: ObjectSpace
@ -13975,10 +13973,10 @@ Init_GC(void)
rb_define_singleton_method(rb_mGC, "verify_compaction_references", rb_f_notimplement, -1); rb_define_singleton_method(rb_mGC, "verify_compaction_references", rb_f_notimplement, -1);
} }
#if GC_DEBUG_STRESS_TO_CLASS if (GC_DEBUG_STRESS_TO_CLASS) {
rb_define_singleton_method(rb_mGC, "add_stress_to_class", rb_gcdebug_add_stress_to_class, -1); rb_define_singleton_method(rb_mGC, "add_stress_to_class", rb_gcdebug_add_stress_to_class, -1);
rb_define_singleton_method(rb_mGC, "remove_stress_to_class", rb_gcdebug_remove_stress_to_class, -1); rb_define_singleton_method(rb_mGC, "remove_stress_to_class", rb_gcdebug_remove_stress_to_class, -1);
#endif }
{ {
VALUE opts; VALUE opts;