diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | thread.c | 5 |
2 files changed, 11 insertions, 1 deletions
@@ -1,3 +1,10 @@ +Mon Nov 26 22:44:24 2012 KOSAKI Motohiro <kosaki.motohiro@gmail.com> + + * thread.c (rb_thread_terminate_all): use native_sleep() instead + of rb_thread_schedule(). Otherwise, it consume 100% cpu meaninglessly. + [Bug #5368] [ruby-dev:44546] + * thread.c (thread_start_func_2): last sub-thread wakes up main thread. + Mon Nov 26 21:16:04 2012 KOSAKI Motohiro <kosaki.motohiro@gmail.com> * vm_core.h (RUBY_VM_SET_TIMER_INTERRUPT, RUBY_VM_SET_INTERRUPT) @@ -385,7 +385,7 @@ rb_thread_terminate_all(void) while (!rb_thread_alone()) { PUSH_TAG(); if (EXEC_TAG() == 0) { - rb_thread_schedule(); + native_sleep(th, 0); } else { /* ignore exception */ @@ -522,6 +522,9 @@ thread_start_func_2(rb_thread_t *th, VALUE *stack_start, VALUE *register_stack_s /* delete self other than main thread from living_threads */ if (th != main_th) { st_delete_wrap(th->vm->living_threads, th->self); + if (rb_thread_alone()) { + rb_threadptr_interrupt(main_th); + } } /* wake up joining threads */ |