V0.12.x (#215)
* fix #203 NetworkTransport race, with main-isolated variables (#206) Co-authored-by: wti <wti@users.noreply.github.com> * feat/auth: Authentication implementation (#205) * feat: added authentication * feat(auth): improvement to error handling * feat(auth): updated errors and tests in OAuthClientRegistrar * feat(auth): updated ci conformance package version * feat(auth): bumped node version * feat(auth): updated ci conformance step * feat(auth): improvement to Linux support * chore: added docc plugin * chore: added spi yml * chore: added documentation step to ci * chore: increased timeout for test from 5 to 10m --------- Co-authored-by: Paal Øye-Strømme <paal.o.eye@gmail.com> Co-authored-by: wti <wti@users.noreply.github.com> Co-authored-by: yehorsobko <yehorsobko@macpaw.com>
This commit is contained in:
parent
973b46b8f7
commit
6132fd4b5b
1 changed files with 10925 additions and 199 deletions
|
|
@ -511,8 +511,8 @@ import Logging
|
|||
var messageWithNewline = message
|
||||
messageWithNewline.append(UInt8(ascii: "\n"))
|
||||
|
||||
// Use a local actor-isolated variable to track continuation state
|
||||
var sendContinuationResumed = false
|
||||
// Use a main-isolated variable to track continuation state
|
||||
let sendContinuationResumed = MainFlag()
|
||||
|
||||
try await withCheckedThrowingContinuation {
|
||||
[weak self] (continuation: CheckedContinuation<Void, Swift.Error>) in
|
||||
|
|
@ -529,8 +529,8 @@ import Logging
|
|||
guard let self = self else { return }
|
||||
|
||||
Task { @MainActor in
|
||||
if !sendContinuationResumed {
|
||||
sendContinuationResumed = true
|
||||
if !sendContinuationResumed.flag {
|
||||
sendContinuationResumed.flag = true
|
||||
if let error = error {
|
||||
self.logger.error("Send error: \(error)")
|
||||
|
||||
|
|
@ -747,7 +747,8 @@ import Logging
|
|||
/// - Returns: The received data chunk
|
||||
/// - Throws: Network errors or transport failures
|
||||
private func receiveData() async throws -> Data {
|
||||
var receiveContinuationResumed = false
|
||||
// Use a main-isolated variable to track continuation state
|
||||
let receiveContinuationResumed = MainFlag()
|
||||
|
||||
return try await withCheckedThrowingContinuation {
|
||||
[weak self] (continuation: CheckedContinuation<Data, Swift.Error>) in
|
||||
|
|
@ -760,8 +761,8 @@ import Logging
|
|||
connection.receive(minimumIncompleteLength: 1, maximumLength: maxLength) {
|
||||
content, _, isComplete, error in
|
||||
Task { @MainActor in
|
||||
if !receiveContinuationResumed {
|
||||
receiveContinuationResumed = true
|
||||
if !receiveContinuationResumed.flag {
|
||||
receiveContinuationResumed.flag = true
|
||||
if let error = error {
|
||||
continuation.resume(throwing: MCPError.transportError(error))
|
||||
} else if let content = content {
|
||||
|
|
@ -787,6 +788,7 @@ import Logging
|
|||
self.isConnected = connected
|
||||
}
|
||||
}
|
||||
@MainActor final class MainFlag { var flag = false }
|
||||
|
||||
extension NWError {
|
||||
/// Whether this error indicates a connection has been lost or reset.
|
||||
|
|
|
|||
Loading…
Reference in a new issue