[#47135] [ruby-trunk - Feature #8024][Assigned] Lazy sweep を on/off するための機能 — "mrkn (Kenta Murata)" <muraken@...>
16 messages
2013/03/06
[#47150] [ruby-trunk - Bug #8054][Open] open-uri と resolv-replace を同時にロードすると壊れる — "mrkn (Kenta Murata)" <muraken@...>
4 messages
2013/03/09
[#47157] 1CPUでtest-allするとfiberとFileUtilsでエラーたくさん — KOSAKI Motohiro <kosaki.motohiro@...>
CentOS6.3上で
3 messages
2013/03/10
[ruby-dev:47156] [Backport 200 - Backport #8065][Assigned] r39688 - test_queue.rb (test_thr_kill): reduce iterations from 2000 to 250. のバックポート
From:
"kosaki (Motohiro KOSAKI)" <kosaki.motohiro@...>
Date:
2013-03-10 04:46:17 UTC
List:
ruby-dev #47156
Issue #8065 has been reported by kosaki (Motohiro KOSAKI).
----------------------------------------
Backport #8065: r39688 - test_queue.rb (test_thr_kill): reduce iterations from 2000 to 250. のバックポート
https://bugs.ruby-lang.org/issues/8065
Author: kosaki (Motohiro KOSAKI)
Status: Assigned
Priority: Normal
Assignee: nagachika (Tomoyuki Chikanaga)
Category:
Target version:
現在、uniprocessor環境で test_thr_killを実行すると、ほぼ必ず失敗します。原因はコミットログにも書いたのですが
以下の様なスクリプトがあるとき、
total_count.times do |i|
open("test_thr_kill_count", "w") {|f| f.puts i }
queue = Queue.new
r, w = IO.pipe
th = Thread.start {
queue.push(nil)
r.read 1
}
queue.pop
th.kill
th.join
end
ほぼ確実に、
1、Thread.start
2.Queue.pop
3,ここでコンテキストスイッチ
4,Queue.push
5.r.readの処理の途中で gvl_release()
6.ここでコンテキストスイッチ
7.th.kill -> ubf_select -> pthread_kill(SIGVTALARM) とくるが、
別に、ブロッキングシステムコールで寝ているわけではないので
サブスレッドには影響ない
8.th.join
9.ここでコンテキストスイッチ
10.read(2) を呼ぶ
11.ここで動いているスレッドが一旦いなくなる
12.100msec後にtimer threadがSIGVTALARMを再送、read()が解除される
と動くので、30秒間では300回しかループが回りません。
状況証拠的に [Bug #7521] の原因だと見ています。確証はないので、別チケットにしましたが。
--
http://bugs.ruby-lang.org/