[client] transport: exit after SPICE session loss

This commit is contained in:
Geoffrey McRae
2026-08-16 21:55:39 +10:00
parent da36a5c4c2
commit d26e73f615

View File

@@ -2604,15 +2604,11 @@ static void fallbackVideoStateChanged(void * opaque, bool ready)
static void fallbackLost(void * opaque)
{
(void)opaque;
const unsigned int lost = atomic_fetch_or_explicit(&g_state.transportLost,
TRANSPORT_LOST_FALLBACK, memory_order_acq_rel) |
TRANSPORT_LOST_FALLBACK;
if ((lost & TRANSPORT_LOST_ALL) == TRANSPORT_LOST_ALL)
{
DEBUG_INFO("Primary and fallback transport sessions disconnected");
atomic_fetch_or_explicit(&g_state.transportLost,
TRANSPORT_LOST_FALLBACK, memory_order_acq_rel);
DEBUG_INFO("SPICE fallback transport session disconnected");
app_setState(APP_STATE_SHUTDOWN);
}
}
static void fallbackEndpointMismatch(void * opaque, const uint8_t primary[16],
const uint8_t fallback[16])
@@ -2636,12 +2632,21 @@ static const LG_TransportFallbackEventOps fallbackEvents =
static void primaryLost(void)
{
atomic_store_explicit(
&g_state.lgHostConnected, false, memory_order_release);
if (g_state.transport.ops && g_state.transport.ops->name &&
strcmp(g_state.transport.ops->name, "spice") == 0)
{
DEBUG_INFO("SPICE transport session disconnected");
app_setState(APP_STATE_SHUTDOWN);
return;
}
/* Establish restart before updating the transport bookkeeping. Primary
* workers may still be unwinding abandoned payloads in parallel and must
* observe that their failures no longer warrant a terminal shutdown. */
app_setState(APP_STATE_RESTART);
atomic_store_explicit(
&g_state.lgHostConnected, false, memory_order_release);
unsigned int lost = atomic_load_explicit(
&g_state.transportLost, memory_order_acquire);
for (;;)