From afd1a64cd6ee73e69744a09242cc079b3f1f5170 Mon Sep 17 00:00:00 2001 From: kosaki Date: Mon, 13 Jun 2011 15:06:30 +0000 Subject: [PATCH] * 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(). git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32069 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 7 +++++++ thread.c | 14 ++------------ thread_pthread.c | 1 - thread_win32.c | 9 +++++++++ 4 files changed, 18 insertions(+), 13 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4b058a90fc..5f81f1156a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Mon Jun 13 23:55:40 2011 KOSAKI Motohiro + + * 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 * ext/io/console/console.c (console_dev): typo. diff --git a/thread.c b/thread.c index 2a6ba6d637..914b686f00 100644 --- a/thread.c +++ b/thread.c @@ -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 @@ -105,6 +105,15 @@ gvl_release(rb_vm_t *vm) ReleaseMutex(vm->gvl.lock); } +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) {