fix: Rebind Iroh endpoint on room join to fix restart bug

This commit is contained in:
2026-05-27 15:31:59 -04:00
parent 5ff0201d94
commit 3834b35de2
+16 -10
View File
@@ -44,6 +44,7 @@ impl CoreController {
}
struct ActiveSession {
endpoint: Endpoint,
router: Router,
room_state: Arc<IrohGossipState>,
capture_thread: std::thread::JoinHandle<()>,
@@ -88,15 +89,6 @@ async fn run_core_loop(
let memory_lookup = iroh::address_lookup::memory::MemoryLookup::new();
let secret_key = iroh::SecretKey::generate();
// Bind local endpoint on a random port
let endpoint = Endpoint::builder(presets::N0)
.secret_key(secret_key)
.address_lookup(memory_lookup.clone())
.bind()
.await?;
endpoint.online().await;
let audio_backend = Arc::new(PipeWireBackend::new());
let is_muted = Arc::new(AtomicBool::new(false));
@@ -119,6 +111,19 @@ async fn run_core_loop(
session.shutdown(audio_backend.clone()).await;
}
let endpoint = match Endpoint::builder(presets::N0)
.secret_key(secret_key.clone())
.address_lookup(memory_lookup.clone())
.bind()
.await {
Ok(ep) => ep,
Err(e) => {
let _ = ui_tx.send(UiEvent::Error(format!("Failed to bind endpoint: {}", e))).await;
continue;
}
};
endpoint.online().await;
// Determine target ticket
let ticket_str = if ticket.trim().is_empty() || ticket == "create" {
let topic_id: [u8; 32] = rand::random();
@@ -370,6 +375,7 @@ async fn run_core_loop(
});
let session = ActiveSession {
endpoint: endpoint.clone(),
router,
room_state: room_state.clone(),
capture_thread,
@@ -399,7 +405,7 @@ async fn run_core_loop(
let self_state = PeerState {
name: current_name.clone(),
is_muted: new_state,
addr: endpoint.addr(),
addr: session.endpoint.addr(),
};
let _ = session.room_state.update_self_state(self_state).await;
}