diff --git a/mixnode/src/node/metrics.rs b/mixnode/src/node/metrics.rs index cf8e52e942..f62a470407 100644 --- a/mixnode/src/node/metrics.rs +++ b/mixnode/src/node/metrics.rs @@ -114,7 +114,8 @@ impl MetricsSender { fn start(mut self, handle: &Handle) -> JoinHandle<()> { handle.spawn(async move { loop { - tokio::time::delay_for(self.sending_delay).await; + // set the deadline in the future + let sending_delay = tokio::time::delay_for(self.sending_delay); let (received, sent) = self.metrics.acquire_and_reset_metrics().await; match self.directory_client.metrics_post.post(&MixMetric { @@ -125,6 +126,9 @@ impl MetricsSender { Err(err) => error!("failed to send metrics - {:?}", err), Ok(_) => debug!("sent metrics information"), } + + // wait for however much is left + sending_delay.await; } }) } diff --git a/mixnode/src/node/presence.rs b/mixnode/src/node/presence.rs index bc851641a4..0a4f209d16 100644 --- a/mixnode/src/node/presence.rs +++ b/mixnode/src/node/presence.rs @@ -69,8 +69,11 @@ impl Notifier { pub fn start(self, handle: &Handle) -> JoinHandle<()> { handle.spawn(async move { loop { + // set the deadline in the future + let sending_delay = tokio::time::delay_for(self.sending_delay); self.notify(); - tokio::time::delay_for(self.sending_delay).await; + // wait for however much is left + sending_delay.await; } }) } diff --git a/sfw-provider/src/provider/presence.rs b/sfw-provider/src/provider/presence.rs index babdeacca6..c8ff6dcb3a 100644 --- a/sfw-provider/src/provider/presence.rs +++ b/sfw-provider/src/provider/presence.rs @@ -81,9 +81,12 @@ impl Notifier { pub fn start(self, handle: &Handle) -> JoinHandle<()> { handle.spawn(async move { loop { + // set the deadline in the future + let sending_delay = tokio::time::delay_for(self.sending_delay); let presence = self.make_presence().await; self.notify(presence); - tokio::time::delay_for(self.sending_delay).await; + // wait for however much is left + sending_delay.await; } }) }