Problem
C_Logout performs the remote logout synchronously, blocking the UI event handler for up to the operation timeout. Concurrent or reset interleavings can also produce duplicate or stale terminal results.
Reproduction or motivating example
- Start logout while the remote client is slow or unavailable.
- Observe that the initiating UI handler cannot return or redraw while the remote operation is running.
- Trigger lifecycle replacement while logout is in flight.
Expected behavior
Logout initiation returns immediately, exactly one terminal result is emitted, cleanup is bounded, and reset prevents results from an invalidated client generation.
Actual behavior
The call blocks on the remote operation and lifecycle ownership does not provide a complete single-flight/reset contract.
Relevant evidence
Affected code is in whatsrust/lib/client_lifecycle.go and its lifecycle tests.
Acceptance criteria
- Logout initiation is nonblocking.
- Concurrent calls produce one terminal result.
- Remote and local cleanup are timeout-bounded.
- Reset suppresses stale-generation results without callback deadlocks.
- Full Go and race tests pass.
Problem
C_Logoutperforms the remote logout synchronously, blocking the UI event handler for up to the operation timeout. Concurrent or reset interleavings can also produce duplicate or stale terminal results.Reproduction or motivating example
Expected behavior
Logout initiation returns immediately, exactly one terminal result is emitted, cleanup is bounded, and reset prevents results from an invalidated client generation.
Actual behavior
The call blocks on the remote operation and lifecycle ownership does not provide a complete single-flight/reset contract.
Relevant evidence
Affected code is in
whatsrust/lib/client_lifecycle.goand its lifecycle tests.Acceptance criteria