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 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