solve TypeError while running: can't modify rbtree during iteration
FossilOrigin-Name: 7f0ffa614508b9c9cfe1bd71295d00f3f24c852436be1552955c3d03e582b85a
This commit is contained in:
parent
2682000224
commit
769bfa8673
1 changed files with 7 additions and 2 deletions
|
|
@ -124,17 +124,19 @@ class Symphony::Metronome::Scheduler
|
||||||
def process_events
|
def process_events
|
||||||
now = Time.now
|
now = Time.now
|
||||||
|
|
||||||
|
events_to_delete = []
|
||||||
|
events_to_add = []
|
||||||
self.queue.each do |ev|
|
self.queue.each do |ev|
|
||||||
next unless now >= ev.runtime
|
next unless now >= ev.runtime
|
||||||
|
|
||||||
self.queue.delete( ev )
|
events_to_delete << ev
|
||||||
rv = ev.fire( &@proc )
|
rv = ev.fire( &@proc )
|
||||||
|
|
||||||
# Reschedule the event and place it back on the queue.
|
# Reschedule the event and place it back on the queue.
|
||||||
#
|
#
|
||||||
if ev.event.recurring
|
if ev.event.recurring
|
||||||
ev.reset_runtime
|
ev.reset_runtime
|
||||||
self.queue.add( ev ) unless rv.nil?
|
events_to_add << ev unless rv.nil?
|
||||||
|
|
||||||
# It was a single run event, torch it!
|
# It was a single run event, torch it!
|
||||||
#
|
#
|
||||||
|
|
@ -143,6 +145,9 @@ class Symphony::Metronome::Scheduler
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
events_to_delete.map{|e| self.queue.delete( e ) }
|
||||||
|
events_to_add.map{|e| self.queue.add( e ) }
|
||||||
end
|
end
|
||||||
|
|
||||||
end # Symphony::Metronome::Scheduler
|
end # Symphony::Metronome::Scheduler
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue