[ruby-core:88502] [Ruby trunk Bug#14998] Race conditions in MonitorMixin when interrupted

From: eregontp@...
Date: 2018-08-16 12:51:13 UTC
List: ruby-core #88502
Issue #14998 has been reported by Eregon (Benoit Daloze).

----------------------------------------
Bug #14998: Race conditions in MonitorMixin when interrupted
https://bugs.ruby-lang.org/issues/14998

* Author: Eregon (Benoit Daloze)
* Status: Open
* Priority: Normal
* Assignee: shugo (Shugo Maeda)
* Target version: 
* ruby -v: ruby 2.6.0dev (2018-08-16 trunk 64394) [x86_64-linux]
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN
----------------------------------------
From https://bugs.ruby-lang.org/issues/14859#note-9

The code of MonitorMixin#wait is:

~~~ ruby
    def wait(timeout = nil)
      @monitor.__send__(:mon_check_owner)
      count = @monitor.__send__(:mon_exit_for_cond)
      begin
        @cond.wait(@monitor.instance_variable_get(:@mon_mutex), timeout)
        return true
      ensure
        # What if Thread#raise happens here?
        @monitor.__send__(:mon_enter_for_cond, count)
      end
    end
~~~

Probably this code needs to carefully use Thread.handle_interrupt.



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:[email protected]?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>

In This Thread

Prev Next