From 4edfa94ece29d97b1f6eeb67f261638479c0ab48 Mon Sep 17 00:00:00 2001 From: Roger Lam Date: Mon, 23 Mar 2015 03:08:01 -0700 Subject: [PATCH] Explicitly catch NoMethodError exception when queue is empty and handle_event is called on nil This occurs when a watch is stopped and then terminated. Undo comments --- lib/god/driver.rb | 3 ++- test/test_driver.rb | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/god/driver.rb b/lib/god/driver.rb index ec37c115..0590442e 100644 --- a/lib/god/driver.rb +++ b/lib/god/driver.rb @@ -179,7 +179,7 @@ def initialize(task) loop do begin @events.pop.handle_event - rescue ThreadError => e + rescue ThreadError, NoMethodError => e # queue is empty break rescue Object => e @@ -189,6 +189,7 @@ def initialize(task) end end end + @thread.abort_on_exception = true end # Check if we're in the driver context. diff --git a/test/test_driver.rb b/test/test_driver.rb index cac45de3..55485cb2 100644 --- a/test/test_driver.rb +++ b/test/test_driver.rb @@ -23,4 +23,12 @@ def test_push_pop_wait t.join end + + def test_handle_empty_queue + task = God::Task.new + driver = God::Driver.new(task) + + events = driver.instance_variable_get(:@events) + assert events.shutdown + end end