Files
psxrecomp/runtime/include/netplay_hash_confirm.h
Shokunin 465f926ecf netplay: confirm against every peer, shed the own view when behind, progress-based stall timeout
Four-peer rollback desynced under load (R4, host behind): the guests
predicted the slow host's pad, hash-confirmed the tick among themselves
through the one shared peer ring, then promoted the host's real pad into
history only (hc-silent promote) while the host simulated it. The host
stayed forked; its recovery episode was then refused as a "zombie load"
behind the guests' (wrongly) agreed tip.

- Hash confirm is a quorum over every occupied peer seat
  (rnet_hc_set_peer_mask / note_peer_from, recomp-net) for three or more
  seats; two seats keep the one-peer chain.
- A peer more than 4 ticks behind the others' inputs sheds its own view
  (psx_mod_render_local_view status FAST_FORWARD, held 60 ticks), so the
  presentation-only pass goes before the simulation slips.
  PSX_NET_LOCAL_VIEW_SHED=0 keeps it.
- The admit-stall watchdog counts time without progress: a remote input tip
  that advances restarts it, so a slow peer is waited for.
  PSX_NET_ADMIT_STALL_MS (20000) and PSX_NET_LIVENESS_MS (1500) configure it.
- Pins recomp-net fix/rollback-span-stall.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 06:59:03 -07:00

36 lines
1.1 KiB
C

#ifndef PSX_NETPLAY_HASH_CONFIRM_H
#define PSX_NETPLAY_HASH_CONFIRM_H
/*
* MotK compatibility shim → recomp-net hash_confirm.
* Prefer rnet_hc_* in new code.
*/
#include "recomp_net/hash_confirm.h"
#ifdef __cplusplus
extern "C" {
#endif
#define NETPLAY_HC_RING RNET_HC_RING
typedef RNetHashConfirm NetplayHashConfirm;
#define netplay_hc_reset rnet_hc_reset
#define netplay_hc_prime_after rnet_hc_prime_after
#define netplay_hc_note_local rnet_hc_note_local
#define netplay_hc_note_peer rnet_hc_note_peer
#define netplay_hc_note_peer_from rnet_hc_note_peer_from
#define netplay_hc_set_peer_mask rnet_hc_set_peer_mask
#define netplay_hc_resolved_through rnet_hc_resolved_through
#define netplay_hc_confirm_through rnet_hc_confirm_through
#define netplay_hc_local_digest rnet_hc_local_digest
#define netplay_hc_peer_digest rnet_hc_peer_digest
#define netplay_hc_peek_mismatch rnet_hc_peek_mismatch
#define netplay_hc_heal_stale_gap rnet_hc_heal_stale_gap
#ifdef __cplusplus
}
#endif
#endif /* PSX_NETPLAY_HASH_CONFIRM_H */