@@ -90,7 +90,8 @@ impl Actor {
9090 pub ( super ) async fn run ( mut self ) {
9191 const DEBOUNCE : Duration = Duration :: from_millis ( 250 ) ;
9292
93- let mut last_event = None ;
93+ let mut pending_change = false ;
94+ let mut pending_time_jump = false ;
9495 let mut debounce_interval = time:: interval ( DEBOUNCE ) ;
9596 let mut wall_time_interval = time:: interval ( POLL_WALL_TIME_INTERVAL ) ;
9697
@@ -99,23 +100,24 @@ impl Actor {
99100 biased;
100101
101102 _ = debounce_interval. tick( ) => {
102- if let Some ( time_jumped) = last_event. take( ) {
103- self . handle_potential_change( time_jumped) . await ;
103+ if pending_change || pending_time_jump {
104+ self . handle_potential_change( pending_time_jump) . await ;
105+ pending_change = false ;
106+ pending_time_jump = false ;
104107 }
105108 }
106109 _ = wall_time_interval. tick( ) => {
107110 trace!( "tick: wall_time_interval" ) ;
108111 if self . check_wall_time_advance( ) {
109- // Trigger potential change
110- last_event. replace( true ) ;
112+ pending_time_jump = true ;
111113 debounce_interval. reset_immediately( ) ;
112114 }
113115 }
114116 event = self . mon_receiver. recv( ) => {
115117 match event {
116118 Some ( NetworkMessage :: Change ) => {
117119 trace!( "network activity detected" ) ;
118- last_event . replace ( false ) ;
120+ pending_change = true ;
119121 debounce_interval. reset_immediately( ) ;
120122 }
121123 None => {
@@ -128,7 +130,7 @@ impl Actor {
128130 match msg {
129131 Some ( ActorMessage :: NetworkChange ) => {
130132 trace!( "external network activity detected" ) ;
131- last_event . replace ( false ) ;
133+ pending_change = true ;
132134 debounce_interval. reset_immediately( ) ;
133135 }
134136 None => {
0 commit comments