fix(peer): coalesce full UI view publications
Keep one queued and one replaceable pending snapshot for remote-library and Call-to-Play views while preserving lifecycle-event FIFO delivery. Generation barriers and fenced drains prevent stale nonempty views from crossing disable or acknowledgement boundaries. Test Plan: - just test - just clippy - focused burst, lifecycle ordering, fence, repeated-barrier, and stale-view tests - independent ordering review - git diff --check
This commit is contained in:
1 parent
470e119515
commit
37420e26ed
17 files changed
+828
-251
No files matched your search
@@ -34,6 +34,7 @@ use lanspread_peer::{
|
||||
PeerCommand,
|
||||
PeerEndpoint,
|
||||
PeerEvent,
|
||||
PeerEventReceiver,
|
||||
PeerGameDB,
|
||||
PeerIdentity,
|
||||
PeerRuntimeComponent,
|
||||
@@ -44,6 +45,7 @@ use lanspread_peer::{
|
||||
StreamInstallSettings,
|
||||
load_peer_identity,
|
||||
migrate_legacy_state,
|
||||
peer_event_channel,
|
||||
start_peer_with_options,
|
||||
};
|
||||
use lanspread_peer_cli::{
|
||||
@@ -308,7 +310,7 @@ async fn main() -> eyre::Result<()> {
|
||||
let fixture_seeds = seed_fixtures(&args.games_dir, &args.fixtures)?;
|
||||
let migration = migrate_legacy_state(&args.games_dir, &args.state_dir).await;
|
||||
|
||||
let (tx_events, rx_events) = mpsc::unbounded_channel();
|
||||
let (tx_events, rx_events) = peer_event_channel();
|
||||
let peer_game_db = Arc::new(RwLock::new(PeerGameDB::new()));
|
||||
let catalog_game_db = Arc::new(catalog_game_db);
|
||||
let active_outbound_transfers: OutboundTransfers = Arc::new(RwLock::new(HashMap::new()));
|
||||
@@ -865,7 +867,7 @@ async fn wait_peers(shared: &SharedState, count: usize, timeout: Duration) -> ey
|
||||
}
|
||||
|
||||
async fn event_loop(
|
||||
mut rx_events: mpsc::UnboundedReceiver<PeerEvent>,
|
||||
mut rx_events: PeerEventReceiver,
|
||||
shared: Arc<SharedState>,
|
||||
writer: JsonlWriter,
|
||||
) {
|
||||
|
||||
Reference in new issue
Block a user