diff --git a/ChangeLog b/ChangeLog index 5d596c4ffb..e6ffb58d22 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Tue Sep 17 21:06:04 2002 Nobuyoshi Nakada + + * eval.c (rb_thread_die): put thread dead state. + + * eval.c (rb_thread_atfork): free stack buffer at fork too. + Tue Sep 17 01:13:31 2002 Yukihiro Matsumoto * eval.c (rb_mod_nesting): load wrapping module should appear in diff --git a/eval.c b/eval.c index 14915d6d22..94067fcda2 100644 --- a/eval.c +++ b/eval.c @@ -7758,6 +7758,16 @@ rb_thread_ready(th) } } +static void +rb_thread_die(th) + rb_thread_t th; +{ + th->gid = 0; + th->status = THREAD_KILLED; + if (th->stk_ptr) free(th->stk_ptr); + th->stk_ptr = 0; +} + static void rb_thread_remove(th) rb_thread_t th; @@ -7765,12 +7775,9 @@ rb_thread_remove(th) if (th->status == THREAD_KILLED) return; rb_thread_ready(th); - th->status = THREAD_KILLED; - th->gid = 0; + rb_thread_die(th); th->prev->next = th->next; th->next->prev = th->prev; - if (th->stk_ptr) free(th->stk_ptr); - th->stk_ptr = 0; } static int @@ -9186,8 +9193,7 @@ rb_thread_atfork() if (rb_thread_alone()) return; FOREACH_THREAD(th) { if (th != curr_thread) { - th->gid = 0; - th->status = THREAD_KILLED; + rb_thread_die(th); } } END_FOREACH(th);