Skip to content

fix: suppress ephemeral relay onFailure during eviction to prevent stale cooldowns#297

Merged
barrydeen merged 1 commit intomainfrom
fix/search-relay-cooldown-race
Mar 23, 2026
Merged

fix: suppress ephemeral relay onFailure during eviction to prevent stale cooldowns#297
barrydeen merged 1 commit intomainfrom
fix/search-relay-cooldown-race

Conversation

@barrydeen
Copy link
Copy Markdown
Owner

Summary

  • When reconnectAll/forceReconnectAll evicts ephemeral relays, disconnect() triggers an async onFailure on OkHttp's thread
  • With reconnectEnabled still true, collectRelayFailures would write a new cooldown into relayCooldownsafter relayCooldowns.clear() already ran — leaving a stale entry
  • Next call to sendToRelayOrEphemeral (e.g. the user searches after returning from background) hits the stale cooldown and returns false, silently blocking the new ephemeral connection

Fix

Set relay.reconnectEnabled = false before relay.disconnect() in both ephemeral eviction loops, mirroring the pattern already in place for persistent and DM relays in forceReconnectAll.

Test plan

  • Open app, use search — confirm results load
  • Minimize app for >30s, reopen, search again — confirm results load (previously broken)
  • Minimize app for <30s, reopen, search again — confirm results load

…ale cooldowns

When reconnectAll/forceReconnectAll evicts ephemeral relays, disconnect()
triggers an async onFailure on OkHttp's thread. With reconnectEnabled still
true, collectRelayFailures would write a new cooldown into relayCooldowns
after the relayCooldowns.clear() call at the start of the reconnect — leaving
a stale cooldown that blocked sendToRelayOrEphemeral from recreating the
connection on the next search.

Fix mirrors the existing pattern for persistent/DM relays: set
reconnectEnabled = false before disconnect() so the failure emission is
suppressed during eviction.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@barrydeen barrydeen merged commit 9c1ebfe into main Mar 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant