[#44036] [ruby-trunk - Feature #6242][Open] Ruby should support lists — "shugo (Shugo Maeda)" <redmine@...>

20 messages 2012/04/01

[#44084] [ruby-trunk - Bug #6246][Open] 1.9.3-p125 intermittent segfault — "jshow (Jodi Showers)" <jodi@...>

22 messages 2012/04/02

[#44156] [ruby-trunk - Feature #6265][Open] Remove 'useless' 'concatenation' syntax — "rosenfeld (Rodrigo Rosenfeld Rosas)" <rr.rosas@...>

45 messages 2012/04/06

[#44163] [ruby-trunk - Bug #6266][Open] encoding related exception with recent integrated psych — "jonforums (Jon Forums)" <redmine@...>

10 messages 2012/04/06

[#44303] [ruby-trunk - Feature #6284][Open] Add composition for procs — "pabloh (Pablo Herrero)" <pablodherrero@...>

57 messages 2012/04/12

[#44349] [ruby-trunk - Feature #6293][Open] new queue / blocking queues — "tenderlovemaking (Aaron Patterson)" <aaron@...>

10 messages 2012/04/13

[#44402] [ruby-trunk - Feature #6308][Open] Eliminate delegation from WeakRef — "headius (Charles Nutter)" <headius@...>

20 messages 2012/04/17

[#44403] [ruby-trunk - Feature #6309][Open] Add a reference queue for weak references — "headius (Charles Nutter)" <headius@...>

15 messages 2012/04/17

[#44533] [ruby-trunk - Bug #6341][Open] SIGSEGV: Thread.new { fork { GC.start } }.join — "rudolf (r stu3)" <redmine@...>

24 messages 2012/04/22

[#44630] [ruby-trunk - Feature #6361][Open] Bitwise string operations — "MartinBosslet (Martin Bosslet)" <Martin.Bosslet@...>

31 messages 2012/04/26

[#44648] [ruby-trunk - Feature #6367][Open] #same? for Enumerable — "prijutme4ty (Ilya Vorontsov)" <prijutme4ty@...>

16 messages 2012/04/26

[#44704] [ruby-trunk - Feature #6373][Open] public #self — "trans (Thomas Sawyer)" <transfire@...>

61 messages 2012/04/27

[#44748] [ruby-trunk - Feature #6376][Open] Feature lookup and checking if feature is loaded — "trans (Thomas Sawyer)" <transfire@...>

13 messages 2012/04/28

[ruby-core:44341] [ruby-trunk - Bug #6288] Change error message for thread block to be less misleading

From: "rklemme (Robert Klemme)" <shortcutter@...>
Date: 2012-04-13 15:10:46 UTC
List: ruby-core #44341
Issue #6288 has been updated by rklemme (Robert Klemme).


Hi,

thanks for looking into this!

mame (Yusuke Endoh) wrote:
> Is "possible deadlock detected" better?

If I understand properly what the deadlock check does (see also #5258) it merely verifies that there is at least one thread left which could wake up this thread.  So I'd rather have something like "No live threads left. Deadlock?", but then again my understanding of the code in question is not too thorough.

> Please elaborate "a more complex scenario" with small example.

$ ruby19 -r thread -e 'q=SizedQueue.new(100);r=Thread.new {until (x=q.deq).nil?; raise "SilentError";end};1000.times {|i| q.enq i};q.enq nil'
/opt/lib/ruby/1.9.1/thread.rb:301:in `sleep': deadlock detected (fatal)
        from /opt/lib/ruby/1.9.1/thread.rb:301:in `block in push'
        from <internal:prelude>:10:in `synchronize'
        from /opt/lib/ruby/1.9.1/thread.rb:297:in `push'
        from -e:1:in `block in <main>'
        from -e:1:in `times'
        from -e:1:in `<main>'

Basically what happens is that the reader thread silently dies as you can see if you set Thread.abort_on_exception:

$ ruby19 -r thread -e 'Thread.abort_on_exception=true;q=SizedQueue.new(100);r=Thread.new {until (x=q.deq).nil?; raise "SilentError";end};1000.times {|i| q.enq i};q.enq nil'
-e:1:in `block in <main>': SilentError (RuntimeError)

Kind regards

robert
----------------------------------------
Bug #6288: Change error message for thread block to be less misleading
https://bugs.ruby-lang.org/issues/6288#change-25885

Author: rklemme (Robert Klemme)
Status: Feedback
Priority: Normal
Assignee: 
Category: core
Target version: 
ruby -v: ruby 1.9.3p125 (2012-02-16) [i386-cygwin]


Test case:

11:50:07 ~$ ruby19 -r thread -e 'q=SizedQueue.new 10;1_000_000.times {|i| p i;q.enq i}'
0
1
2
3
4
5
6
7
8
9
10
/opt/lib/ruby/1.9.1/thread.rb:301:in `sleep': deadlock detected (fatal)
        from /opt/lib/ruby/1.9.1/thread.rb:301:in `block in push'
        from <internal:prelude>:10:in `synchronize'
        from /opt/lib/ruby/1.9.1/thread.rb:297:in `push'
        from -e:1:in `block in <main>'
        from -e:1:in `times'
        from -e:1:in `<main>'


This is not a deadlock, but there is no other thread which could wake up main thread.  Deadlock is misleading because in a more complex scenario where I had the error initially it wasn't obvious that the other thread had died and I looked for the wrong error in my code.


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

In This Thread