summaryrefslogtreecommitdiff
path: root/gc.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-04-18 08:37:50 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-04-18 08:37:50 +0000
commit6b5e24a61a7488344c3560dcd1527c8257870e34 (patch)
tree7b844bc3a882b1d1f60d4a9948f61247030ae3a4 /gc.c
parent38af102cccd76913172bf5843097965946ed6077 (diff)
* 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
Diffstat (limited to 'gc.c')
-rw-r--r--gc.c6
1 files changed, 3 insertions, 3 deletions
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),