diff --git a/src/core/mod.rs b/src/core/mod.rs index 9ecdce9..1e60074 100644 --- a/src/core/mod.rs +++ b/src/core/mod.rs @@ -54,25 +54,30 @@ struct ActiveSession { impl ActiveSession { async fn shutdown(self, audio_backend: Arc) { - // Abort asynchronous tasks first + crate::log_msg("ActiveSession::shutdown started"); self.datagram_task.abort(); self.mixer_task.abort(); self.event_task.abort(); + crate::log_msg("Aborted tasks"); - // Stop the audio backend in a blocking thread to avoid blocking the async executor let audio_backend_clone = audio_backend.clone(); let _ = tokio::task::spawn_blocking(move || { + crate::log_msg("Stopping audio backend..."); let _ = audio_backend_clone.stop(); + crate::log_msg("Audio backend stopped"); }).await; - // Leave room + crate::log_msg("Leaving room..."); let _ = self.room_state.leave().await; + crate::log_msg("Room left"); - // Shut down router - let _ = self.router.shutdown().await; + crate::log_msg("Shutting down router..."); + let _ = tokio::time::timeout(std::time::Duration::from_secs(1), self.router.shutdown()).await; + crate::log_msg("Router shut down"); - // Clean up capture thread + crate::log_msg("Joining capture thread..."); let _ = self.capture_thread.join(); + crate::log_msg("ActiveSession::shutdown complete"); } } diff --git a/src/network/gossip.rs b/src/network/gossip.rs index 2fd5e76..a32fdc3 100644 --- a/src/network/gossip.rs +++ b/src/network/gossip.rs @@ -195,6 +195,11 @@ impl RoomState for IrohGossipState { } Ok(iroh_gossip::api::Event::NeighborDown(peer_id)) => { crate::log_msg(&format!("Gossip event: NeighborDown={:?}", peer_id)); + let removed = peers.lock().unwrap().remove(&peer_id).is_some(); + if removed { + crate::log_msg(&format!("Removed peer due to NeighborDown: {:?}", peer_id)); + let _ = event_tx.send(RoomEvent::PeerLeft(peer_id)).await; + } } Ok(other) => { crate::log_msg(&format!("Gossip other event: {:?}", other));