diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | thread.c | 14 | ||||
-rw-r--r-- | thread_pthread.c | 1 | ||||
-rw-r--r-- | thread_win32.c | 9 |
4 files changed, 18 insertions, 13 deletions
@@ -1,3 +1,10 @@ +Mon Jun 13 23:55:40 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com> + + * thread.c (rb_thread_schedule_rec): call gvl_yield() unconditionally. + * thread_pthread.c: remove HAVE_GVL_YIELD macro. + * thread_win32.c (gvl_yield): new. this fallback logic was moved from + rb_thread_schedule_rec(). + Mon Jun 13 23:50:25 2011 NAKAMURA Usaku <usa@ruby-lang.org> * ext/io/console/console.c (console_dev): typo. @@ -1025,18 +1025,8 @@ rb_thread_schedule_rec(int sched_depth, unsigned long limits_us) RB_GC_SAVE_MACHINE_CONTEXT(th); -#if HAVE_GVL_YIELD - { - if (th->running_time_us >= limits_us) - gvl_yield(th->vm, th); - } -#else - gvl_release(th->vm); - { - native_thread_yield(); - } - gvl_acquire(th->vm, th); -#endif + if (th->running_time_us >= limits_us) + gvl_yield(th->vm, th); rb_thread_set_current(th); thread_debug("rb_thread_schedule/switch done\n"); diff --git a/thread_pthread.c b/thread_pthread.c index cd1e7bc48b..3954fc04c4 100644 --- a/thread_pthread.c +++ b/thread_pthread.c @@ -83,7 +83,6 @@ gvl_release(rb_vm_t *vm) native_mutex_unlock(&vm->gvl.lock); } -#define HAVE_GVL_YIELD 1 static void gvl_yield(rb_vm_t *vm, rb_thread_t *th) { diff --git a/thread_win32.c b/thread_win32.c index da335e88ff..668d94b6c7 100644 --- a/thread_win32.c +++ b/thread_win32.c @@ -106,6 +106,15 @@ gvl_release(rb_vm_t *vm) } static void +gvl_yield(rb_vm_t *vm, rb_thread_t *th) +{ + gvl_release(th->vm); + native_thread_yield(); + gvl_acquire(vm, th); +} + + +static void gvl_atfork(rb_vm_t *vm) { rb_bug("gvl_atfork() is called on win32"); |