This would indeed eliminate a huge amount of confusion for people getting
started with threads. Or for people years of experience with threads, for
that matter...


On Fri, Sep 27, 2013 at 7:18 AM, headius (Charles Nutter) <
headius / headius.com> wrote:

>
> Issue #6647 has been updated by headius (Charles Nutter).
>
>
> So, can we do this for 2.1? I have heard from many other users that really
> would like exceptions bubbling out of threads to be reported in some way.
> We have had numerous bug reports relating to code where threads disappear
> without a trace.
> ----------------------------------------
> Feature #6647: Exceptions raised in threads should be logged
> https://bugs.ruby-lang.org/issues/6647#change-42043
>
> Author: headius (Charles Nutter)
> Status: Assigned
> Priority: Normal
> Assignee: matz (Yukihiro Matsumoto)
> Category: core
> Target version: next minor
>
>
> Many applications and users I have dealt with have run into bugs due to
> Ruby's behavior of quietly swallowing exceptions raised in threads. I
> believe this is a bug, and threads should always at least log exceptions
> that bubble all the way out and terminate them.
>
> The implementation should be simple, but I'm not yet familiar enough with
> the MRI codebase to provide a patch. The exception logging should be logged
> in the same way top-level exceptions get logged, but perhaps with
> information about the thread that was terminated because of the exception.
>
> Here is a monkey patch that simulates what I'm hoping to achieve with this
> bug:
>
>
> class << Thread
>   alias old_new new
>
>   def new(*args, &block)
>     old_new(*args) do |*bargs|
>       begin
>         block.call(*bargs)
>       rescue Exception => e
>         raise if Thread.abort_on_exception ||
> Thread.current.abort_on_exception
>         puts "Thread for block #{block.inspect} terminated with exception:
> #{e.message}"
>         puts e.backtrace.map {|line| "  #{line}"}
>       end
>     end
>   end
> end
>
> Thread.new { 1 / 0 }.join
> puts "After thread"
>
> __END__
>
> Output:
>
> system ~/projects/jruby $ ruby thread_error.rb
> Thread for block #<Proc:0x000000010d008a80 / thread_error.rb:17> terminated
> with exception: divided by 0
>   thread_error.rb:17:in `/'
>   thread_error.rb:17
>   thread_error.rb:7:in `call'
>   thread_error.rb:7:in `new'
>   thread_error.rb:5:in `initialize'
>   thread_error.rb:5:in `old_new'
>   thread_error.rb:5:in `new'
>   thread_error.rb:17
> After thread
>
>
>
> --
> http://bugs.ruby-lang.org/
>



-- 
Avdi Grimm
http://avdi.org

I only check email twice a day. to reach me sooner, go to
http://awayfind.com/avdi