From 541bdd29ba6cd7ff53b73d1a21900bb10239c77b Mon Sep 17 00:00:00 2001 From: nobu Date: Wed, 19 Jun 2013 06:11:15 +0000 Subject: [PATCH] gc.c: more info * gc.c (gc_mark_children): show more info for broken object. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41410 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 4 ++++ gc.c | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/ChangeLog b/ChangeLog index eb3f31d844..25222c6325 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Wed Jun 19 15:11:13 2013 Nobuyoshi Nakada + + * gc.c (gc_mark_children): show more info for broken object. + Wed Jun 19 14:04:41 2013 Kazuhiro NISHIYAMA * test/ruby/envutil.rb (EnvUtil#rubybin): remove unnecessary diff --git a/gc.c b/gc.c index cd2bf11fd5..397f73bc80 100644 --- a/gc.c +++ b/gc.c @@ -105,6 +105,8 @@ static ruby_gc_params_t initial_params = { #define nomem_error GET_VM()->special_exceptions[ruby_error_nomemory] +void rb_gcdebug_print_obj_condition(VALUE obj); + #if USE_RGENGC /* RGENGC_DEBUG: * 1: basic information @@ -3397,6 +3399,11 @@ gc_mark_children(rb_objspace_t *objspace, VALUE ptr) break; default: +#ifdef GC_DEBUG + rb_gcdebug_print_obj_condition((VALUE)obj); +#endif + if (BUILTIN_TYPE(obj) == T_NONE) rb_bug("rb_gc_mark(): %p is T_NONE", (void *)obj); + if (BUILTIN_TYPE(obj) == T_ZOMBIE) rb_bug("rb_gc_mark(): %p is T_ZOMBIE", (void *)obj); rb_bug("rb_gc_mark(): unknown data type 0x%x(%p) %s", BUILTIN_TYPE(obj), (void *)obj, is_pointer_to_heap(objspace, obj) ? "corrupted object" : "non object");