Skip to content

Commit e216c19

Browse files
committed
Use unfair lock for continuation finished
1 parent a9f4961 commit e216c19

File tree

1 file changed

+4
-5
lines changed

1 file changed

+4
-5
lines changed

FirebaseAI/Sources/Types/Internal/Live/AsyncWebSocket.swift

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,7 @@ final class AsyncWebSocket: NSObject, @unchecked Sendable, URLSessionWebSocketDe
1919
private let webSocketTask: URLSessionWebSocketTask
2020
private let stream: AsyncThrowingStream<URLSessionWebSocketTask.Message, Error>
2121
private let continuation: AsyncThrowingStream<URLSessionWebSocketTask.Message, Error>.Continuation
22-
private var continuationFinished = false
23-
private let continuationLock = NSLock()
22+
private let continuationFinished = UnfairLock<Bool>(false)
2423
private var closeError: UnfairLock<WebSocketClosedError?>
2524

2625
init(urlSession: URLSession = GenAIURLSession.default, urlRequest: URLRequest) {
@@ -75,10 +74,10 @@ final class AsyncWebSocket: NSObject, @unchecked Sendable, URLSessionWebSocketDe
7574

7675
webSocketTask.cancel(with: code, reason: reason)
7776

78-
continuationLock.withLock {
79-
guard !continuationFinished else { return }
77+
continuationFinished.withLock { isFinished in
78+
guard !isFinished else { return }
8079
self.continuation.finish(throwing: error)
81-
self.continuationFinished = true
80+
isFinished = true
8281
}
8382
}
8483

0 commit comments

Comments
 (0)