From: Robert Klemme Date: 2006-09-18T19:46:17+09:00 Subject: Re: handle exception thrown in nested threads from top level thread On 18.09.2006 12:15, hemant wrote: > In following code, both methos get_client_symbol and sync_clients gets > called and they start their own new threads. Now, what I would like to > do is, whenever a exception is raised from the nested threads..i would > like to catch them in the toplevel thread. > > Now..I have tried many things: > Thread.abort_on_exception = true > and using just rescue or rescue Exception or rescue RuntimeError, > however the exception raised in nested threads won't get caught in the > top level thread. Any clues? There is no direct way. If you think about it for a moment it's not possible to catch an exception thrown in another thread. But in Ruby you can actually do that by rethrowing it in another thread. Try this: print "Main thread : ", Thread.current.inspect, "\n" 2.times do Thread.new(Thread.current) do |parent| print "Child thread: ", Thread.current.inspect, "\n" loop do begin puts "." raise "Foo" if rand > 0.8 sleep 1 rescue Exception => e print "Thread : ", Thread.current.inspect, ": ", e.inspect, "\n" parent.raise e end end end end 10.times do begin sleep 10 rescue Exception => e print "Thread main: ", Thread.current.inspect, ": ", e.inspect, "\n" puts e.backtrace end end Kind regards robert