diff --git a/livekit/src/rtc_engine/mod.rs b/livekit/src/rtc_engine/mod.rs index cc8da7ce2..bfc694a9a 100644 --- a/livekit/src/rtc_engine/mod.rs +++ b/livekit/src/rtc_engine/mod.rs @@ -17,7 +17,7 @@ use std::{borrow::Cow, fmt::Debug, sync::Arc, time::Duration}; use libwebrtc::prelude::*; use livekit_api::signal_client::{SignalError, SignalOptions}; use livekit_protocol as proto; -use livekit_runtime::{interval, Interval, JoinHandle}; +use livekit_runtime::{interval, Interval, JoinHandle, MissedTickBehavior}; use parking_lot::{RwLock, RwLockReadGuard}; use thiserror::Error; use tokio::sync::{ @@ -360,6 +360,8 @@ impl EngineInner { session.wait_pc_connection().await?; let (engine_tx, engine_rx) = mpsc::unbounded_channel(); + let mut interval = interval(RECONNECT_INTERVAL); + interval.set_missed_tick_behavior(MissedTickBehavior::Delay); let inner = Arc::new(Self { lk_runtime, engine_tx, @@ -374,7 +376,7 @@ impl EngineInner { }), options, reconnecting_lock: AsyncRwLock::default(), - reconnecting_interval: AsyncMutex::new(interval(RECONNECT_INTERVAL)), + reconnecting_interval: AsyncMutex::new(interval), }); // Start initial tasks @@ -722,7 +724,7 @@ impl EngineInner { ) }; - for i in 0..RECONNECT_ATTEMPTS { + for i in 1..=RECONNECT_ATTEMPTS { let (is_closed, full_reconnect) = { let running_handle = self.running_handle.read(); (running_handle.closed, running_handle.full_reconnect) @@ -733,7 +735,7 @@ impl EngineInner { } if full_reconnect { - if i == 0 { + if i == 1 { let (tx, rx) = oneshot::channel(); let _ = self.engine_tx.send(EngineEvent::Restarting(tx)); let _ = rx.await; @@ -757,7 +759,7 @@ impl EngineInner { return Ok(()); } } else { - if i == 0 { + if i == 1 { let (tx, rx) = oneshot::channel(); let _ = self.engine_tx.send(EngineEvent::Resuming(tx)); let _ = rx.await;