[#49270] [Ruby trunk - Feature #11558] Time related C APIs — akr@...
SXNzdWUgIzExNTU4IGhhcyBiZWVuIHVwZGF0ZWQgYnkgQWtpcmEgVGFuYWth
7 messages
2015/09/30
[#49275] Re: [Ruby trunk - Feature #11558] Time related C APIs
— KOSAKI Motohiro <kosaki.motohiro@...>
2015/09/30
Pj4g5pei5a2Y44Gu6Z2e5YWs6ZaLQVBJ44KS5YWs6ZaL44GX44Gm44GP44Gg44GV44GE44CCDQo+
[#49278] Re: [Ruby trunk - Feature #11558] Time related C APIs
— Tanaka Akira <akr@...>
2015/10/01
MjAxNeW5tDEw5pyIMeaXpSA3OjAzIEtPU0FLSSBNb3RvaGlybyA8a29zYWtpLm1vdG9oaXJvQGdt
[ruby-dev:49259] [Ruby trunk - Bug #11496] Mutex#synchronize testing code should be data race.
From:
kosaki.motohiro@...
Date:
2015-09-15 18:28:42 UTC
List:
ruby-dev #49259
Issue #11496 has been updated by Motohiro KOSAKI.
inserting sleep is unacceptable because sleep invokes volunteer context switch and changes a meaning and a purpose of the test.
Instead, I'd like to insert a waste loop to trigger a thread preemption race. like this
100.times {
m = Mutex.new
r = 0
num_threads = 10
loop=100
(1..num_threads).map{
Thread.new do
loop.times do
m.synchronize{
tmp = r
100.times { # waste loop
}
r = tmp + 1
}
end
end
}.each{|e|
e.join
}
raise unless r == num_threads*loop
}
puts "pass"
----------------------------------------
Bug #11496: Mutex#synchronize testing code should be data race.
https://bugs.ruby-lang.org/issues/11496#change-54199
* Author: Yuki Kurihara
* Status: Open
* Priority: Normal
* Assignee:
* ruby -v: ruby 2.3.0dev (2015-08-28 trunk 51715) [x86_64-darwin14]
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN
----------------------------------------
Current Mutex#synchronize testing code is not to fail every time if not use Mutex#synchronize.
~~~ruby
100.times {
r = 0
max = 10
(1..max).map{
Thread.new{
i=0
while i<max*max
i+=1
r += 1
end
}
}.each{|e|
e.join
}
raise unless r == 1000
}
puts "pass"
~~~
So, I propose this patch.
---Files--------------------------------
mutex-synchronize.patch (424 Bytes)
--
https://bugs.ruby-lang.org/