[#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:44387] [ruby-trunk - Bug #6288] Change error message for thread block to be less misleading

From: "rklemme (Robert Klemme)" <shortcutter@...>
Date: 2012-04-16 12:07:09 UTC
List: ruby-core #44387
Issue #6288 has been updated by rklemme (Robert Klemme).


mame (Yusuke Endoh) wrote:
> Hello,
> 
> 2012/4/14 rklemme (Robert Klemme) <[email protected]>:
> > 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.
> 
> Looks reasonable to me.  I'll commit unless there is no objection.

Great, thank you!

> >> 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:
> 
> It does not make sense.  Did you write the code to wait forever?

I am not sure what you mean.  The real code was more complex and the exception was thrown from another method - unintentionally of course.  This is just a simplified example to illustrate the situation.

> If so, you should write "sleep" simply.  If not, your code is
> actually "deadlocked", in a common sense.

There is no deadlock because there are no two threads (or processes) accessing resources in a bad order.  I am not aware of any deadlock which can be caused by a single thread only.  If you find a definition of deadlock which needs only a single thread / action / process please let us know.

"A deadlock is a situation wherein two or more competing actions are each waiting for the other to finish, and thus neither ever does."
http://en.wikipedia.org/wiki/Deadlock

> Why didn't you insist that Thread.abort_on_exception be true by
> default?  I can't understand why you blame deadlock detection.

Well, others have done already before. :-)  Also, regardless of abort_on_exception the error message for this particular situation is at least misleading if not plain wrong (according to definition of "deadlock").  The default value of abort_on_exception does not change that fact a bit.  I mean, the same would happen with a different default of abort_on_exception and someone setting it explicitly to false.

Kind regards

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

Author: rklemme (Robert Klemme)
Status: Assigned
Priority: Normal
Assignee: mame (Yusuke Endoh)
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