From 6b5e24a61a7488344c3560dcd1527c8257870e34 Mon Sep 17 00:00:00 2001 From: nobu Date: Fri, 18 Apr 2008 08:37:50 +0000 Subject: [PATCH] * gc.c (rb_gc_mark_locations): get rid of underflow. * gc.c (mark_current_machine_context): check if the main thread stack position may shink under the intialized position. [ruby-core:16436] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@16072 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 7 +++++++ gc.c | 6 +++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 179e79fa64..f17357fcae 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Fri Apr 18 17:37:48 2008 Nobuyoshi Nakada + + * gc.c (rb_gc_mark_locations): get rid of underflow. + + * gc.c (mark_current_machine_context): check if the main thread stack + position may shink under the intialized position. [ruby-core:16436] + Thu Apr 17 22:20:52 2008 Yusuke Endoh * enc/trans/utf_16_32.c (fun_so_to_utf_16be, fun_so_to_utf_16le): add diff --git a/gc.c b/gc.c index edcd9b099b..1a826fbc54 100644 --- a/gc.c +++ b/gc.c @@ -794,6 +794,7 @@ rb_gc_mark_locations(VALUE *start, VALUE *end) { long n; + if (end <= start) return; n = end - start; mark_locations_array(start,n); } @@ -1491,10 +1492,9 @@ mark_current_machine_context(rb_thread_t *th) mark_locations_array((VALUE*)save_regs_gc_mark, sizeof(save_regs_gc_mark) / sizeof(VALUE)); - mark_locations_array(stack_start, stack_end - stack_start); + rb_gc_mark_locations(stack_start, stack_end); #ifdef __ia64 - mark_locations_array(th->machine_register_stack_start, - th->machine_register_stack_end - th->machine_register_stack_start); + rb_gc_mark_locations(th->machine_register_stack_start, th->machine_register_stack_end); #endif #if defined(__human68k__) || defined(__mc68000__) mark_locations_array((VALUE*)((char*)STACK_END + 2),