diff options
author | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-07-03 04:53:05 +0000 |
---|---|---|
committer | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-07-03 04:53:05 +0000 |
commit | 0e5360b2e406fd0f182e62bc5cb38be4d43a9afc (patch) | |
tree | f23650345dabb71716a3510c0633b6e2c7addee8 /cont.c | |
parent | ee457d92c2d99d85f61346ccd7dd3a6c21b294b6 (diff) |
* cont.c (cont_save_machine_stack): clear saved_thread.machine_stack*.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@12681 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'cont.c')
-rw-r--r-- | cont.c | 19 |
1 files changed, 12 insertions, 7 deletions
@@ -95,6 +95,7 @@ static void cont_save_machine_stack(rb_thread_t *th, rb_context_t *cont) { int size; + rb_thread_t *sth = &cont->saved_thread; rb_gc_set_stack_end(&th->machine_stack_end); #ifdef __ia64 @@ -132,6 +133,11 @@ cont_save_machine_stack(rb_thread_t *th, rb_context_t *cont) MEMCPY(cont->machine_register_stack, cont->machine_register_stack_src, VALUE, size); #endif + + sth->machine_stack_start = sth->machine_stack_end = 0; +#ifdef __ia64 + sth->machine_register_stack_start = sth->machine_register_stack_end = 0; +#endif } static rb_context_t * @@ -139,7 +145,7 @@ cont_new(VALUE klass) { rb_context_t *cont; volatile VALUE contval; - rb_thread_t *th = GET_THREAD(), *sth; + rb_thread_t *th = GET_THREAD(); contval = Data_Make_Struct(klass, rb_context_t, cont_mark, cont_free, cont); @@ -150,9 +156,8 @@ cont_new(VALUE klass) cont->self = contval; cont->alive = Qtrue; - /* save context */ + /* save thread context */ cont->saved_thread = *th; - sth = &cont->saved_thread; return cont; } @@ -163,17 +168,17 @@ static VALUE cont_capture(volatile int *stat) { rb_context_t *cont; - rb_thread_t *th; + rb_thread_t *th = GET_THREAD(), *sth; volatile VALUE contval; - vm_stack_to_heap(GET_THREAD()); + vm_stack_to_heap(th); cont = cont_new(rb_cCont); contval = cont->self; - th = &cont->saved_thread; + sth = &cont->saved_thread; cont->vm_stack = ALLOC_N(VALUE, th->stack_size); MEMCPY(cont->vm_stack, th->stack, VALUE, th->stack_size); - th->stack = 0; + sth->stack = 0; cont_save_machine_stack(th, cont); |