Fix hang on sign-up
This fixes a hang during sign-up, which was caused by a change in RelayPool handling code that would only send data to handlers with matching subscription IDs. It so happens that some handlers want to receive all notes, and they set the filters to `nil` to achieve that. Furthermore, some sign-up networking code was moved to prevent race conditions. No changelog entry because the behaviour was not changed since the last public release. Changelog-None Closes: https://github.com/damus-io/damus/issues/3254 Signed-off-by: Daniel D’Aquino <daniel@daquino.me>
This commit is contained in:
@@ -10,6 +10,7 @@ import Network
|
||||
|
||||
struct RelayHandler {
|
||||
let sub_id: String
|
||||
/// The filters that this handler will handle. Set this to `nil` if you want your handler to receive all events coming from the relays.
|
||||
let filters: [NostrFilter]?
|
||||
let to: [RelayURL]?
|
||||
var handler: AsyncStream<(RelayURL, NostrConnectionEvent)>.Continuation
|
||||
@@ -535,7 +536,10 @@ actor RelayPool {
|
||||
}
|
||||
|
||||
for handler in handlers {
|
||||
guard handler.sub_id == event.subId else { continue }
|
||||
// We send data to the handlers if:
|
||||
// - the subscription ID matches, or
|
||||
// - the handler filters is `nil`, which is used in some cases as a blanket "give me all notes" (e.g. during signup)
|
||||
guard handler.sub_id == event.subId || handler.filters == nil else { continue }
|
||||
logStreamPipelineStats("RelayPool_\(relay_id.absoluteString)", "RelayPool_Handler_\(handler.sub_id)")
|
||||
handler.handler.yield((relay_id, event))
|
||||
}
|
||||
|
||||
@@ -144,7 +144,11 @@ struct SaveKeysView: View {
|
||||
await add_rw_relay(self.pool, relay)
|
||||
}
|
||||
|
||||
self.loading = true
|
||||
|
||||
Task {
|
||||
await self.pool.connect()
|
||||
|
||||
let stream = AsyncStream<(RelayURL, NostrConnectionEvent)> { streamContinuation in
|
||||
Task { await self.pool.register_handler(sub_id: "signup", filters: nil, handler: streamContinuation) }
|
||||
}
|
||||
@@ -152,10 +156,6 @@ struct SaveKeysView: View {
|
||||
await handle_event(relay: relayUrl, ev: connectionEvent)
|
||||
}
|
||||
}
|
||||
|
||||
self.loading = true
|
||||
|
||||
await self.pool.connect()
|
||||
}
|
||||
|
||||
func save_to_storage(first_contact_event: NdbNote, first_relay_list_event: NdbNote, for account: CreateAccountModel) {
|
||||
|
||||
Reference in New Issue
Block a user