I found that some old code that had once worked just sort of stopped
working. It turns out that Thread.new do … end wasn’t doing anything; it
may as well have been a comment.
So I ran the following test:
Thread.new do
raise 'Your faith in Thread was well-placed.'
end
time = Time.now + 1
while (Time.now < time)
Thread.pass
end
It just sat there for a second, then was done. No exception was raised.
This was on my ruby 1.7.2 (2002-07-02) [i386-mswin32] machine. So, I tried
it on my ruby 1.7.3 (2002-10-09) [i686-linux] machine, and it did the same
thing: one second of nothing.
I know threads didn’t just ‘stop working’ all over the world just now, so it
must be me. What am I doing wrong??
By default, if a thread raises an exception, it does not abort all the other
threads. This has hit me more times than I care to relate.
Try putting
Thread.abort_on_exception = true
somewhere in your code … preferably before the raising of the exception :-).
···
On Sat, 23 Nov 2002 13:32, Chris wrote:
Hello,
I found that some old code that had once worked just sort of stopped
working. It turns out that Thread.new do … end wasn’t doing anything; it
may as well have been a comment.
So I ran the following test:
Thread.new do
raise ‘Your faith in Thread was well-placed.’
end
time = Time.now + 1
while (Time.now < time)
Thread.pass
end
I found that some old code that had once worked just sort of
stopped working. It turns out that Thread.new do … end wasn’t
doing anything; it may as well have been a comment.
So I ran the following test:
Thread.new do
raise ‘Your faith in Thread was well-placed.’
end
time = Time.now + 1
while (Time.now <time)
Thread.pass
end
Thread.new do
begin
raise ‘Your faith in Thread was well-placed.’
rescue => ex
puts ex.message
end
y
time = Time.now + 1
while (Time.now < time)
Thread.pass
end
It just sat there for a second, then was done. No exception was
raised. This was on my ruby 1.7.2 (2002-07-02) [i386-mswin32]
machine. So, I tried it on my ruby 1.7.3 (2002-10-09) [i686-linux]
machine, and it did the same thing: one second of nothing.
I know threads didn’t just ‘stop working’ all over the world just
now, so it must be me. What am I doing wrong??
Unless Thread#abort_on_exception is true, exceptions in threads
won’t be propagated to the main thread. This bit me in a program
recently.
-austin
– Austin Ziegler, austin@halostatue.ca on 2002.11.22 at 22.29.39