[MacRuby-devel] [MacRuby] #835: Abort occurs when kills the MainThread.
MacRuby
ruby-noreply at macosforge.org
Sun Aug 8 13:21:49 PDT 2010
#835: Abort occurs when kills the MainThread.
----------------------------------+-----------------------------------------
Reporter: watson1978@… | Owner: lsansonetti@…
Type: defect | Status: new
Priority: blocker | Milestone:
Component: MacRuby | Keywords:
----------------------------------+-----------------------------------------
Test Script:
{{{
#!ruby
$ cat test_thread_kill.rb
Thread.new {
i = 0
loop do
p i
i += 1
sleep 0.5
end
}
sleep 3
Thread.main.kill
p "ng"
}}}
Result of Ruby 1.9.1:
{{{
$ ruby test_thread_kill.rb
0
1
2
3
4
5
}}}
Result of MacRuby Trunk:
{{{
$ macruby test_thread_kill.rb
0
1
2
3
4
5
uncaught Objective-C/C++ exception...
terminate called after throwing an instance of
'RoxorThreadRaiseException*'
zsh: abort macruby test_thread_kill.rb
}}}
I think that MacRuby should calls rb_exit() when kills the MainThread.
{{{
#!diff
diff --git a/thread.c b/thread.c
index 579e105..7e7e9d4 100644
--- a/thread.c
+++ b/thread.c
@@ -328,6 +328,11 @@ static VALUE
rb_thread_kill(VALUE thread, SEL sel)
{
rb_vm_thread_t *t = GetThreadPtr(thread);
+ rb_vm_thread_t *t_main = GetThreadPtr(rb_vm_main_thread());
+
+ if (t->vm == t_main->vm) {
+ rb_exit(EXIT_SUCCESS);
+ }
if (t->status != THREAD_KILLED) {
rb_vm_thread_cancel(t);
}
}}}
--
Ticket URL: <http://www.macruby.org/trac/ticket/835>
MacRuby <http://macruby.org/>
More information about the MacRuby-devel
mailing list