From 4b8c4d583326be4583b3fc7561e7b577824f46cf Mon Sep 17 00:00:00 2001 From: Tom Werner Date: Thu, 9 Aug 2007 10:56:45 -0700 Subject: [PATCH] fix sync bug in Timer --- lib/god/timer.rb | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/lib/god/timer.rb b/lib/god/timer.rb index 1ff32a4..5f1fd92 100644 --- a/lib/god/timer.rb +++ b/lib/god/timer.rb @@ -27,6 +27,7 @@ module God # Start the scheduler loop to handle events def initialize @events = [] + @mutex = Mutex.new @timer = Thread.new do loop do @@ -37,7 +38,9 @@ module God @events.each do |event| if t >= event.at self.trigger(event) - @events.delete(event) + @mutex.synchronize do + @events.delete(event) + end else break end @@ -51,13 +54,17 @@ module God # Create and register a new TimerEvent with the given parameters def schedule(condition, interval = condition.interval) - @events << TimerEvent.new(condition, interval) - @events.sort! { |x, y| x.at <=> y.at } + @mutex.synchronize do + @events << TimerEvent.new(condition, interval) + @events.sort! { |x, y| x.at <=> y.at } + end end # Remove any TimerEvents for the given condition def unschedule(condition) - @events.reject! { |x| x.condition == condition } + @mutex.synchronize do + @events.reject! { |x| x.condition == condition } + end end def trigger(event) -- 2.11.4.GIT