diff --git a/ChangeLog b/ChangeLog index 122c34e583..2ca1681704 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Thu Feb 20 01:23:59 2003 Nobuyoshi Nakada + + * eval.c (rb_thread_restore_context): inhibit interrupts in + critical section while context switching. [ruby-talk:64785] + Wed Feb 19 18:27:42 2003 Nobuyoshi Nakada * node.h (nd_cpath): nested class/module declaration. diff --git a/eval.c b/eval.c index 410248a9a0..6cb8224479 100644 --- a/eval.c +++ b/eval.c @@ -7825,6 +7825,7 @@ static int thread_switch(n) int n; { + rb_trap_immediate = (curr_thread->flags&0x100)?1:0; switch (n) { case 0: return 0; @@ -7890,6 +7891,7 @@ rb_thread_restore_context(th, exit) if (&v < th->stk_pos + th->stk_len) stack_extend(th, exit); } + rb_trap_immediate = 0; /* inhibit interrupts from here */ ruby_frame = th->frame; ruby_scope = th->scope; ruby_class = th->klass; @@ -7898,7 +7900,6 @@ rb_thread_restore_context(th, exit) ruby_dyna_vars = th->dyna_vars; ruby_block = th->block; scope_vmode = th->flags&SCOPE_MASK; - rb_trap_immediate = (th->flags&0x100)?1:0; ruby_iter = th->iter; prot_tag = th->tag; tracing = th->tracing;