diff options
author | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-07-22 15:04:11 +0000 |
---|---|---|
committer | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-07-22 15:04:11 +0000 |
commit | ee755e2ce96c515336d65ea318692998fcf1547d (patch) | |
tree | 0d8f4fc7b93624388d1e0c23753601a88c6281b1 | |
parent | 478d37da053f39608fa505991aa69bcff4ade998 (diff) | |
download | ruby-ee755e2ce96c515336d65ea318692998fcf1547d.tar.gz |
* thread.c (rb_threadptr_execute_interrupts_common): increase
running_time_us on THREAD_TO_KILL like on THREAD_RUNNABLE.
This cause not to siwtch from a thread which is to be killed
on FreeBSD and Mac OS X. see also the test.
This issue maybe exist for long time but happens after r36430.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36492 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | test/ruby/test_thread.rb | 18 | ||||
-rw-r--r-- | thread.c | 2 |
3 files changed, 27 insertions, 1 deletions
@@ -1,3 +1,11 @@ +Sun Jul 22 23:58:48 2012 NARUSE, Yui <naruse@ruby-lang.org> + + * thread.c (rb_threadptr_execute_interrupts_common): increase + running_time_us on THREAD_TO_KILL like on THREAD_RUNNABLE. + This cause not to siwtch from a thread which is to be killed + on FreeBSD and Mac OS X. see also the test. + This issue maybe exist for long time but happens after r36430. + Sat Jul 21 06:21:45 2012 NARUSE, Yui <naruse@ruby-lang.org> * lib/net/http.rb: fixes for r36476. [Feature #6546] diff --git a/test/ruby/test_thread.rb b/test/ruby/test_thread.rb index ed22cf9b44..1f87304c3e 100644 --- a/test/ruby/test_thread.rb +++ b/test/ruby/test_thread.rb @@ -774,4 +774,22 @@ class TestThreadGroup < Test::Unit::TestCase end assert_in_delta(t1 - t0, 1, 1) end + + def test_thread_timer_and_ensure + exit = false + t = Thread.new do + begin + sleep + ensure + 1 until exit # Ruby 1.8 won't switch threads here + end + end + + Thread.pass until t.status == "sleep" + + t.kill + t.alive? == true + exit = true + t.join + end end @@ -1742,7 +1742,7 @@ rb_threadptr_execute_interrupts_common(rb_thread_t *th, int blocking_timing) else limits_us >>= -th->priority; - if (status == THREAD_RUNNABLE) + if (status == THREAD_RUNNABLE || status == THREAD_TO_KILL) th->running_time_us += TIME_QUANTUM_USEC; EXEC_EVENT_HOOK(th, RUBY_EVENT_SWITCH, th->cfp->self, 0, 0); |