From 50e7cb3b38bb703c1b6abf00c38dddeeac4e21da Mon Sep 17 00:00:00 2001 From: matz Date: Mon, 15 Jun 2009 09:06:16 +0000 Subject: * gc.c (os_obj_of): invoke garbage collection before iteration, to avoid accessing half recycled object references. [ruby-dev:38613] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@23693 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- gc.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'gc.c') diff --git a/gc.c b/gc.c index 74163bedb5..6d3c34e0bb 100644 --- a/gc.c +++ b/gc.c @@ -85,6 +85,7 @@ void *alloca (); int ruby_gc_debug_indent = 0; #undef GC_DEBUG +#define GC_DEBUG /* for GC profile */ #define GC_PROFILE_MORE_DETAIL 0 @@ -272,7 +273,7 @@ typedef struct RVALUE { struct RComplex complex; } as; #ifdef GC_DEBUG - char *file; + const char *file; int line; #endif } RVALUE; @@ -2392,6 +2393,7 @@ os_obj_of(rb_objspace_t *objspace, VALUE of) RVALUE *p, *pend; volatile VALUE v; + rb_garbage_collect(); i = 0; while (i < heaps_used) { while (0 < i && (uintptr_t)membase < (uintptr_t)heaps[i-1].membase) -- cgit v1.2.3