[ruby-core:102827] [Ruby master Bug#17636] Race condition in check_rvalue_consistency_force when using ractors
From:
naruse@...
Date:
2021-03-11 11:34:45 UTC
List:
ruby-core #102827
Issue #17636 has been updated by naruse (Yui NARUSE).
Backport changed from 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: REQUIRED to 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: DONE
ruby_3_0 d3863cb2e80f27d26b521b2c957b21feacb900de merged revision(s) 07ab172ebef28bb82c2650694548d123802d6c22.
----------------------------------------
Bug #17636: Race condition in check_rvalue_consistency_force when using ractors
https://bugs.ruby-lang.org/issues/17636#change-90886
* Author: peterzhu2118 (Peter Zhu)
* Status: Closed
* Priority: Normal
* Assignee: ko1 (Koichi Sasada)
* Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: DONE
----------------------------------------
[GitHub PR](https://github.com/ruby/ruby/pull/4191)
When `RGENGC_CHECK_MODE` is enabled and we use multiple ractors, there is a race condition in `check_rvalue_consistency_force` that causes an assertion to fail. It happens when a page is created during the call to `is_pointer_to_heap`, which causes the binary search to fail.
# Reproduction
```ruby
NUM_RACTORS = 10
rs = NUM_RACTORS.times.map do |i|
Ractor.new(i) do |i|
arr = []
10_000.times do |j|
arr << "foo.#{i}.#{j}"
end
arr
end
end
arrs = rs.map { |r| r.take }
```
The crash log is attached below in `crash.log`.
---Files--------------------------------
crash.log (20.1 KB)
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>