File tree Expand file tree Collapse file tree 1 file changed +12
-23
lines changed
Expand file tree Collapse file tree 1 file changed +12
-23
lines changed Original file line number Diff line number Diff line change @@ -300,30 +300,19 @@ extension DatabaseSnapshotPool: DatabaseSnapshotReader {
300300 throw DatabaseError . connectionIsClosed ( )
301301 }
302302
303- let dbAccess = CancellableDatabaseAccess ( )
304- return try await dbAccess. withCancellableContinuation { continuation in
305- readerPool. asyncGet { result in
306- do {
307- let ( reader, releaseReader) = try result. get ( )
308- // Second async jump because that's how `Pool.async` has to be used.
309- reader. async { db in
310- defer {
311- releaseReader ( self . poolCompletion ( db) )
312- }
313- do {
314- let result = try dbAccess. inDatabase ( db) {
315- try value ( db)
316- }
317- continuation. resume ( returning: result)
318- } catch {
319- continuation. resume ( throwing: error)
320- }
321- }
322- } catch {
323- continuation. resume ( throwing: error)
324- }
325- }
303+ let ( reader, releaseReader) = try await readerPool. get ( )
304+ var readerCompletion : PoolCompletion ?
305+ defer {
306+ // readerCompletion might be null in cancelled database accesses
307+ releaseReader ( readerCompletion ?? . reuse)
308+ }
309+ let ( result, completion) = try await reader. execute { db in
310+ let result = Result { try value ( db) }
311+ let completion = poolCompletion ( db)
312+ return ( result, completion)
326313 }
314+ readerCompletion = completion
315+ return try result. get ( )
327316 }
328317
329318 public func asyncRead(
You can’t perform that action at this time.
0 commit comments