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

ruby-changes:52228

From: normal <ko1@a...>
Date: Sat, 18 Aug 2018 13:24:35 +0900 (JST)
Subject: [ruby-changes:52228] normal:r64436 (trunk): thread_sync.c (do_sleep): avoid thread-switch/interrupt check

normal	2018-08-18 13:24:31 +0900 (Sat, 18 Aug 2018)

  New Revision: 64436

  https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=64436

  Log:
    thread_sync.c (do_sleep): avoid thread-switch/interrupt check
    
    Calling rb_mutex_sleep directly should avoid
    thread-switching/interrupt checking which can lead to occasional
    failures.
    
    Unfortunately, this means overriding Mutex#sleep is no longer
    supported.  Will let this commit run for a bit see if CI failures
    from ConditionVariable specs continue...
    
    cf. https://rubyci.org/logs/rubyci.s3.amazonaws.com/ubuntu/ruby-trunk/log/20180817T213003Z.fail.html.gz
    
    [ruby-core:88524] [Bug #14999]

  Modified files:
    trunk/thread_sync.c
Index: thread_sync.c
===================================================================
--- thread_sync.c	(revision 64435)
+++ thread_sync.c	(revision 64436)
@@ -1358,6 +1358,12 @@ static VALUE https://github.com/ruby/ruby/blob/trunk/thread_sync.c#L1358
 do_sleep(VALUE args)
 {
     struct sleep_call *p = (struct sleep_call *)args;
+
+    if (rb_obj_class(p->mutex) == rb_cMutex) {
+        return rb_mutex_sleep(p->mutex, p->timeout);
+    }
+
+    /* FIXME: Mutex_m may still check interrupts here */
     return rb_funcallv(p->mutex, id_sleep, 1, &p->timeout);
 }
 

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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