solve TypeError while running: can't modify rbtree during iteration

FossilOrigin-Name: 7f0ffa614508b9c9cfe1bd71295d00f3f24c852436be1552955c3d03e582b85a
This commit is contained in:
slowbro 2023-03-21 18:38:00 +00:00
parent 2682000224
commit 769bfa8673

View file

@ -124,17 +124,19 @@ class Symphony::Metronome::Scheduler
def process_events
now = Time.now
events_to_delete = []
events_to_add = []
self.queue.each do |ev|
next unless now >= ev.runtime
self.queue.delete( ev )
events_to_delete << ev
rv = ev.fire( &@proc )
# Reschedule the event and place it back on the queue.
#
if ev.event.recurring
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!
#
@ -143,6 +145,9 @@ class Symphony::Metronome::Scheduler
end
end
events_to_delete.map{|e| self.queue.delete( e ) }
events_to_add.map{|e| self.queue.add( e ) }
end
end # Symphony::Metronome::Scheduler