summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-06-19 06:11:15 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-06-19 06:11:15 +0000
commit541bdd29ba6cd7ff53b73d1a21900bb10239c77b (patch)
treebc64d9f0e959799abb0ea1e6c6a0f43af651ee41
parent0d736fb72987cf82b10f5408a58f82005d0e20ab (diff)
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
-rw-r--r--ChangeLog4
-rw-r--r--gc.c7
2 files changed, 11 insertions, 0 deletions
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 <nobu@ruby-lang.org>
+
+ * gc.c (gc_mark_children): show more info for broken object.
+
Wed Jun 19 14:04:41 2013 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
* 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");