[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]