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/