From 769bfa8673b80042ff157062ce9a6c05e67bc1b5 Mon Sep 17 00:00:00 2001 From: slowbro Date: Tue, 21 Mar 2023 18:38:00 +0000 Subject: [PATCH] solve TypeError while running: can't modify rbtree during iteration FossilOrigin-Name: 7f0ffa614508b9c9cfe1bd71295d00f3f24c852436be1552955c3d03e582b85a --- lib/symphony/metronome/scheduler.rb | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/symphony/metronome/scheduler.rb b/lib/symphony/metronome/scheduler.rb index 49778c9..abd1bdf 100644 --- a/lib/symphony/metronome/scheduler.rb +++ b/lib/symphony/metronome/scheduler.rb @@ -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