ruby-changes:52258
From: normal <ko1@a...>
Date: Sun, 19 Aug 2018 09:01:09 +0900 (JST)
Subject: [ruby-changes:52258] normal:r64466 (trunk): Revert "thread_sync.c (rb_mutex_sleep): skip interrupt check before sleep"
normal 2018-08-19 09:01:03 +0900 (Sun, 19 Aug 2018) New Revision: 64466 https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=64466 Log: Revert "thread_sync.c (rb_mutex_sleep): skip interrupt check before sleep" This reverts commit 2e420b8b99db4a5b81e2deda1ca386d59ad6bcba (r64464) Modified files: trunk/thread.c trunk/thread_sync.c Index: thread.c =================================================================== --- thread.c (revision 64465) +++ thread.c (revision 64466) @@ -94,8 +94,7 @@ static ID id_locals; https://github.com/ruby/ruby/blob/trunk/thread.c#L94 enum SLEEP_FLAGS { SLEEP_DEADLOCKABLE = 0x1, - SLEEP_SPURIOUS_CHECK = 0x2, - SLEEP_BEFORE_CHECK_INTS = 0x4 + SLEEP_SPURIOUS_CHECK = 0x2 }; static void sleep_timespec(rb_thread_t *, struct timespec, unsigned int fl); @@ -1188,9 +1187,7 @@ sleep_forever(rb_thread_t *th, unsigned https://github.com/ruby/ruby/blob/trunk/thread.c#L1187 status = fl & SLEEP_DEADLOCKABLE ? THREAD_STOPPED_FOREVER : THREAD_STOPPED; th->status = status; - if (!(fl & SLEEP_BEFORE_CHECK_INTS)) { - RUBY_VM_CHECK_INTS_BLOCKING(th->ec); - } + RUBY_VM_CHECK_INTS_BLOCKING(th->ec); while (th->status == status) { if (fl & SLEEP_DEADLOCKABLE) { th->vm->sleeper++; @@ -1296,9 +1293,7 @@ sleep_timespec(rb_thread_t *th, struct t https://github.com/ruby/ruby/blob/trunk/thread.c#L1293 getclockofday(&end); timespec_add(&end, &ts); th->status = THREAD_STOPPED; - if (!(fl & SLEEP_BEFORE_CHECK_INTS)) { - RUBY_VM_CHECK_INTS_BLOCKING(th->ec); - } + RUBY_VM_CHECK_INTS_BLOCKING(th->ec); while (th->status == THREAD_STOPPED) { native_sleep(th, &ts); woke = vm_check_ints_blocking(th->ec); Index: thread_sync.c =================================================================== --- thread_sync.c (revision 64465) +++ thread_sync.c (revision 64466) @@ -438,7 +438,7 @@ rb_mutex_cleanup_keeping_mutexes(const r https://github.com/ruby/ruby/blob/trunk/thread_sync.c#L438 static VALUE rb_mutex_sleep_forever(VALUE time) { - sleep_forever(GET_THREAD(), SLEEP_DEADLOCKABLE|SLEEP_BEFORE_CHECK_INTS); + rb_thread_sleep_deadly_allow_spurious_wakeup(); return Qnil; } @@ -446,8 +446,7 @@ static VALUE https://github.com/ruby/ruby/blob/trunk/thread_sync.c#L446 rb_mutex_wait_for(VALUE time) { struct timespec *t = (struct timespec*)time; - /* permit spurious check */ - sleep_timespec(GET_THREAD(), *t, SLEEP_BEFORE_CHECK_INTS); + sleep_timespec(GET_THREAD(), *t, 0); /* permit spurious check */ return Qnil; } -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/