diff options
Diffstat (limited to 'src/sync/mod.rs')
| -rw-r--r-- | src/sync/mod.rs | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/sync/mod.rs b/src/sync/mod.rs index c62b478..15c89e3 100644 --- a/src/sync/mod.rs +++ b/src/sync/mod.rs | |||
| @@ -1251,6 +1251,9 @@ impl SyncManager { | |||
| 1251 | let metrics_clone = self.metrics.clone(); // Clone metrics for the spawned task | 1251 | let metrics_clone = self.metrics.clone(); // Clone metrics for the spawned task |
| 1252 | let is_bootstrap_clone = is_bootstrap; // Clone is_bootstrap for the spawned task | 1252 | let is_bootstrap_clone = is_bootstrap; // Clone is_bootstrap for the spawned task |
| 1253 | tokio::spawn(async move { | 1253 | tokio::spawn(async move { |
| 1254 | // Track whether we've already sent a disconnect notification | ||
| 1255 | let mut disconnect_sent = false; | ||
| 1256 | |||
| 1254 | while let Some(relay_event) = event_rx.recv().await { | 1257 | while let Some(relay_event) = event_rx.recv().await { |
| 1255 | match relay_event { | 1258 | match relay_event { |
| 1256 | RelayEvent::Event(event) => { | 1259 | RelayEvent::Event(event) => { |
| @@ -1297,6 +1300,7 @@ impl SyncManager { | |||
| 1297 | relay_url: relay_url_clone.clone(), | 1300 | relay_url: relay_url_clone.clone(), |
| 1298 | }) | 1301 | }) |
| 1299 | .await; | 1302 | .await; |
| 1303 | disconnect_sent = true; | ||
| 1300 | break; | 1304 | break; |
| 1301 | } | 1305 | } |
| 1302 | RelayEvent::Shutdown => { | 1306 | RelayEvent::Shutdown => { |
| @@ -1307,10 +1311,25 @@ impl SyncManager { | |||
| 1307 | relay_url: relay_url_clone.clone(), | 1311 | relay_url: relay_url_clone.clone(), |
| 1308 | }) | 1312 | }) |
| 1309 | .await; | 1313 | .await; |
| 1314 | disconnect_sent = true; | ||
| 1310 | break; | 1315 | break; |
| 1311 | } | 1316 | } |
| 1312 | } | 1317 | } |
| 1313 | } | 1318 | } |
| 1319 | |||
| 1320 | // If the event channel closed without a Closed/Shutdown event | ||
| 1321 | // (e.g., connection dropped unexpectedly), still notify SyncManager | ||
| 1322 | if !disconnect_sent { | ||
| 1323 | tracing::info!( | ||
| 1324 | relay = %relay_url_clone, | ||
| 1325 | "Event channel closed, notifying SyncManager of disconnect" | ||
| 1326 | ); | ||
| 1327 | let _ = disconnect_tx | ||
| 1328 | .send(DisconnectNotification { | ||
| 1329 | relay_url: relay_url_clone.clone(), | ||
| 1330 | }) | ||
| 1331 | .await; | ||
| 1332 | } | ||
| 1314 | }); | 1333 | }); |
| 1315 | 1334 | ||
| 1316 | tracing::info!( | 1335 | tracing::info!( |