ruby-changes:25829
From: kosaki <ko1@a...>
Date: Tue, 27 Nov 2012 11:00:57 +0900 (JST)
Subject: [ruby-changes:25829] kosaki:r37886 (trunk): * eval.c (ruby_cleanup): set thread status to THREAD_KILLED
kosaki 2012-11-27 11:00:40 +0900 (Tue, 27 Nov 2012) New Revision: 37886 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=37886 Log: * eval.c (ruby_cleanup): set thread status to THREAD_KILLED for preventing thr.raise. * test/ruby/test_thread.rb (test_main_thread_status_at_exit): test for the above. Modified files: trunk/ChangeLog trunk/eval.c trunk/test/ruby/test_thread.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 37885) +++ ChangeLog (revision 37886) @@ -1,3 +1,10 @@ +Tue Nov 27 10:55:09 2012 KOSAKI Motohiro <kosaki.motohiro@g...> + + * eval.c (ruby_cleanup): set thread status to THREAD_KILLED + for preventing thr.raise. + * test/ruby/test_thread.rb (test_main_thread_status_at_exit): + test for the above. + Tue Nov 27 10:31:29 2012 KOSAKI Motohiro <kosaki.motohiro@g...> * thread.c (rb_thread_terminate_all): suppress a warning. Index: eval.c =================================================================== --- eval.c (revision 37885) +++ eval.c (revision 37886) @@ -159,6 +159,9 @@ rb_thread_t *th = GET_THREAD(); int nerr; + /* protect from thread.raise */ + th->status = THREAD_KILLED; + rb_threadptr_interrupt(th); rb_threadptr_check_signal(th); PUSH_TAG(); Index: test/ruby/test_thread.rb =================================================================== --- test/ruby/test_thread.rb (revision 37885) +++ test/ruby/test_thread.rb (revision 37886) @@ -889,4 +889,16 @@ }.join end end + + def test_main_thread_status_at_exit + assert_in_out_err([], <<-INPUT, %w(false), []) +Thread.new(Thread.current) {|mth| + begin + sleep 0.1 + ensure + p mth.alive? + end +} + INPUT + end end -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/