[#45530] [ruby-trunk - Feature #6311][Open] memmem()によるrb_memsearch()の高速化 — "Glass_saga (Masaki Matsushita)" <glass.saga@...>

12 messages 2012/04/17

[#45554] [ruby-trunk - Bug #6344][Open] 1.9.3 p125, p194 ruby causes SEGV with test_massign.rb on ppc/ppc64 — "mtasaka (Mamoru Tasaka)" <mtasaka@...>

14 messages 2012/04/23

[ruby-dev:45506] [ruby-trunk - Bug #5258] SizedQueueにBug #5195と同様のバグ

From: "nobu (Nobuyoshi Nakada)" <nobu@...>
Date: 2012-04-11 11:09:38 UTC
List: ruby-dev #45506
Issue #5258 has been updated by nobu (Nobuyoshi Nakada).


It seems natural because the only thread is about to sleep.
----------------------------------------
Bug #5258: SizedQueueにBug #5195と同様のバグ
https://bugs.ruby-lang.org/issues/5258#change-25831

Author: Glass_saga (Masaki Matsushita)
Status: Assigned
Priority: Normal
Assignee: kosaki (Motohiro KOSAKI)
Category: lib
Target version: 2.0.0
ruby -v: ruby 1.9.4dev (2011-09-01 trunk 33157) [x86_64-linux]


=begin
[Bug #5195][ruby-dev:44400]と同様ですが、SizedQueue#pushでsleepしているthreadをwakeupさせると、SizedQueueの@queue_waitにそのthreadがpushされてしまいます。

 require 'thread'
 
 sq = SizedQueue.new(1)
 sq.push(0)
 
 t1 = Thread.start { sq.push(1) ; sleep }
 
 nil until t1.stop?
 t1.wakeup
 nil until t1.stop?
 
 t2 = Thread.start { sq.push(2) }
 
 nil until t1.stop? && t2.stop?
 
 p t1, t2
 sq.instance_eval{ p @queue_wait }
 
 3.times{ sq.pop }
 
 t2.join

上記のコードを実行すると、

 #<Thread:0x00000000b1a198 sleep>
 #<Thread:0x00000000b1a120 sleep>
 [#<Thread:0x00000000b1a198 sleep>, #<Thread:0x00000000b1a198 sleep>, #<Thread:0x00000000b1a120 sleep>]
 /usr/local/lib/ruby/1.9.1/thread.rb:185:in `sleep': deadlock detected (fatal)
        from /usr/local/lib/ruby/1.9.1/thread.rb:185:in `block in pop'
        from <internal:prelude>:10:in `synchronize'
        from /usr/local/lib/ruby/1.9.1/thread.rb:180:in `pop'
        from /usr/local/lib/ruby/1.9.1/thread.rb:324:in `pop'
        from sized_queue.rb:19:in `block in <main>'
        from sized_queue.rb:19:in `times'
        from sized_queue.rb:19:in `<main>'

となります。
場当たり的なものですが[Bug #5195][ruby-dev:44400]の時と同様なpatchを添付します。適用後もtest/thread/test_queue.rbをパスします。
 
=end


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

In This Thread