diff --git a/lib/sidekiq/manager.rb b/lib/sidekiq/manager.rb index 1892c316..5341d1de 100644 --- a/lib/sidekiq/manager.rb +++ b/lib/sidekiq/manager.rb @@ -39,7 +39,7 @@ module Sidekiq timeout = options[:timeout] @done = true - @fetcher.terminate if @fetcher.alive? + @fetcher.terminate! if @fetcher.alive? logger.info { "Shutting down #{@ready.size} quiet workers" } @ready.each { |x| x.terminate if x.alive? } diff --git a/test/test_manager.rb b/test/test_manager.rb index 9a8ce0b8..a3cc308a 100644 --- a/test/test_manager.rb +++ b/test/test_manager.rb @@ -38,6 +38,13 @@ class TestManager < MiniTest::Unit::TestCase result = q.timed_pop(1.0) assert_equal 'done', result mgr.stop + mgr.terminate + + # Gross bloody hack because I can't get the actor threads + # to shut down cleanly in the test. Need @bascule's help here. + (Thread.list - [Thread.current]).each do |t| + t.raise Interrupt + end end end end