From c2e373fec5fa3dd2cda3f52d374607305585d392 Mon Sep 17 00:00:00 2001 From: David Nadoba Date: Wed, 31 Aug 2022 17:22:32 +0200 Subject: [PATCH] Adopt `Sendable` (#155) * Adopt `Sendable` * Workaround Swift 5.4 compiler bug --- Package.swift | 2 +- .../NIOFilterEmptyWritesHandler.swift | 5 +++++ .../NIOTSChannelOptions.swift | 4 ++++ .../NIOTSConnectionBootstrap.swift | 5 +++++ .../NIOTSEventLoopGroup.swift | 5 +++++ .../NIOTSListenerBootstrap.swift | 1 - .../NIOTSListenerChannel.swift | 6 ++++- .../NIOTSNetworkEvents.swift | 22 ++++++++++++++++++- 8 files changed, 46 insertions(+), 4 deletions(-) diff --git a/Package.swift b/Package.swift index 84d354b..f1c8a15 100644 --- a/Package.swift +++ b/Package.swift @@ -21,7 +21,7 @@ let package = Package( .library(name: "NIOTransportServices", targets: ["NIOTransportServices"]), ], dependencies: [ - .package(url: "https://github.com/apple/swift-nio.git", from: "2.32.0"), + .package(url: "https://github.com/apple/swift-nio.git", from: "2.41.1"), .package(url: "https://github.com/apple/swift-atomics.git", from: "1.0.2"), .package(url: "https://github.com/apple/swift-docc-plugin", from: "1.0.0"), ], diff --git a/Sources/NIOTransportServices/NIOFilterEmptyWritesHandler.swift b/Sources/NIOTransportServices/NIOFilterEmptyWritesHandler.swift index a50ceb1..bd12414 100644 --- a/Sources/NIOTransportServices/NIOFilterEmptyWritesHandler.swift +++ b/Sources/NIOTransportServices/NIOFilterEmptyWritesHandler.swift @@ -85,6 +85,11 @@ public final class NIOFilterEmptyWritesHandler: ChannelDuplexHandler { } } +#if swift(>=5.6) +@available(*, unavailable) +extension NIOFilterEmptyWritesHandler: Sendable {} +#endif + // Connection state management extension NIOFilterEmptyWritesHandler { public func channelActive(context: ChannelHandlerContext) { diff --git a/Sources/NIOTransportServices/NIOTSChannelOptions.swift b/Sources/NIOTransportServices/NIOTSChannelOptions.swift index 4114956..ae97a54 100644 --- a/Sources/NIOTransportServices/NIOTSChannelOptions.swift +++ b/Sources/NIOTransportServices/NIOTSChannelOptions.swift @@ -13,7 +13,11 @@ //===----------------------------------------------------------------------===// #if canImport(Network) import NIOCore +#if swift(>=5.6) +@preconcurrency import Network +#else import Network +#endif /// Options that can be set explicitly and only on bootstraps provided by `NIOTransportServices`. @available(OSX 10.14, iOS 12.0, tvOS 12.0, watchOS 6.0, *) diff --git a/Sources/NIOTransportServices/NIOTSConnectionBootstrap.swift b/Sources/NIOTransportServices/NIOTSConnectionBootstrap.swift index c3e0908..d753a87 100644 --- a/Sources/NIOTransportServices/NIOTSConnectionBootstrap.swift +++ b/Sources/NIOTransportServices/NIOTSConnectionBootstrap.swift @@ -238,6 +238,11 @@ public final class NIOTSConnectionBootstrap { } } +#if swift(>=5.6) +@available(*, unavailable) +extension NIOTSConnectionBootstrap: Sendable {} +#endif + @available(OSX 10.14, iOS 12.0, tvOS 12.0, watchOS 6.0, *) extension NIOTSConnectionBootstrap: NIOClientTCPBootstrapProtocol { /// Apply any understood shorthand options to the bootstrap, removing them from the set of options if they are consumed. diff --git a/Sources/NIOTransportServices/NIOTSEventLoopGroup.swift b/Sources/NIOTransportServices/NIOTSEventLoopGroup.swift index 476acbb..c2b43bf 100644 --- a/Sources/NIOTransportServices/NIOTSEventLoopGroup.swift +++ b/Sources/NIOTransportServices/NIOTSEventLoopGroup.swift @@ -120,3 +120,8 @@ public struct NIOTSClientTLSProvider: NIOClientTLSProvider { } } #endif + +#if swift(>=5.5) && canImport(_Concurrency) && canImport(Network) +@available(OSX 10.14, iOS 12.0, tvOS 12.0, watchOS 6.0, *) +extension NIOTSEventLoopGroup: @unchecked Sendable {} +#endif diff --git a/Sources/NIOTransportServices/NIOTSListenerBootstrap.swift b/Sources/NIOTransportServices/NIOTSListenerBootstrap.swift index ec9c3a0..388e24e 100644 --- a/Sources/NIOTransportServices/NIOTSListenerBootstrap.swift +++ b/Sources/NIOTransportServices/NIOTSListenerBootstrap.swift @@ -346,7 +346,6 @@ public final class NIOTSListenerBootstrap { } } - @available(OSX 10.14, iOS 12.0, tvOS 12.0, watchOS 6.0, *) private class AcceptHandler: ChannelInboundHandler { typealias InboundIn = NIOTSConnectionChannel diff --git a/Sources/NIOTransportServices/NIOTSListenerChannel.swift b/Sources/NIOTransportServices/NIOTSListenerChannel.swift index 0c677b1..3f377b5 100644 --- a/Sources/NIOTransportServices/NIOTSListenerChannel.swift +++ b/Sources/NIOTransportServices/NIOTSListenerChannel.swift @@ -130,7 +130,6 @@ internal final class NIOTSListenerChannel { } } - // MARK:- NIOTSListenerChannel implementation of Channel @available(OSX 10.14, iOS 12.0, tvOS 12.0, watchOS 6.0, *) extension NIOTSListenerChannel: Channel { @@ -495,3 +494,8 @@ extension NIOTSListenerChannel { } } #endif + +#if swift(>=5.5) && canImport(_Concurrency) && canImport(Network) +@available(OSX 10.14, iOS 12.0, tvOS 12.0, watchOS 6.0, *) +extension NIOTSListenerChannel: @unchecked Sendable {} +#endif diff --git a/Sources/NIOTransportServices/NIOTSNetworkEvents.swift b/Sources/NIOTransportServices/NIOTSNetworkEvents.swift index 56bdd4e..21d55c5 100644 --- a/Sources/NIOTransportServices/NIOTSNetworkEvents.swift +++ b/Sources/NIOTransportServices/NIOTSNetworkEvents.swift @@ -13,14 +13,18 @@ //===----------------------------------------------------------------------===// #if canImport(Network) +#if swift(>=5.6) +@preconcurrency import Network +#else import Network +#endif import NIOCore /// A tag protocol that can be used to cover all network events emitted by `NIOTransportServices`. /// /// Users are strongly encouraged not to conform their own types to this protocol. @available(OSX 10.14, iOS 12.0, tvOS 12.0, watchOS 6.0, *) -public protocol NIOTSNetworkEvent: Equatable { } +public protocol NIOTSNetworkEvent: Equatable, NIOPreconcurrencySendable { } @available(OSX 10.14, iOS 12.0, tvOS 12.0, watchOS 6.0, *) public enum NIOTSNetworkEvents { @@ -98,4 +102,20 @@ public enum NIOTSNetworkEvents { } } } + +#if swift(>=5.6) +@available(OSX 10.14, iOS 12.0, tvOS 12.0, watchOS 6.0, *) +extension NIOTSNetworkEvents.BetterPathAvailable: Sendable {} +@available(OSX 10.14, iOS 12.0, tvOS 12.0, watchOS 6.0, *) +extension NIOTSNetworkEvents.BetterPathUnavailable: Sendable {} +@available(OSX 10.14, iOS 12.0, tvOS 12.0, watchOS 6.0, *) +extension NIOTSNetworkEvents.PathChanged: Sendable {} +@available(OSX 10.14, iOS 12.0, tvOS 12.0, watchOS 6.0, *) +extension NIOTSNetworkEvents.ConnectToNWEndpoint: Sendable {} +@available(OSX 10.14, iOS 12.0, tvOS 12.0, watchOS 6.0, *) +extension NIOTSNetworkEvents.BindToNWEndpoint: Sendable {} +@available(OSX 10.14, iOS 12.0, tvOS 12.0, watchOS 6.0, *) +extension NIOTSNetworkEvents.WaitingForConnectivity: Sendable {} +#endif + #endif