Skip to content

Commit f9ab1c9

Browse files
authored
Use swift-atomics instead of NIOAtomics (#350)
`NIOAtomics` was deprecated in apple/swift-nio#2204 in favor of `swift-atomics` https://github.com/apple/swift-atomics
1 parent bd93cc0 commit f9ab1c9

File tree

2 files changed

+15
-12
lines changed

2 files changed

+15
-12
lines changed

Package.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ let package = Package(
2121
.library(name: "NIOHTTP2", targets: ["NIOHTTP2"]),
2222
],
2323
dependencies: [
24-
.package(url: "https://github.com/apple/swift-nio.git", from: "2.35.0")
24+
.package(url: "https://github.com/apple/swift-nio.git", from: "2.35.0"),
25+
.package(url: "https://github.com/apple/swift-atomics.git", from: "1.0.2"),
2526
],
2627
targets: [
2728
.executableTarget(
@@ -49,6 +50,7 @@ let package = Package(
4950
.product(name: "NIOHTTP1", package: "swift-nio"),
5051
.product(name: "NIOTLS", package: "swift-nio"),
5152
.product(name: "NIOConcurrencyHelpers", package: "swift-nio"),
53+
.product(name: "Atomics", package: "swift-atomics"),
5254
]),
5355
.target(
5456
name: "NIOHPACK",

Sources/NIOHTTP2/HTTP2StreamChannel.swift

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
//
1313
//===----------------------------------------------------------------------===//
1414

15+
import Atomics
1516
import NIOCore
1617
import NIOConcurrencyHelpers
1718

@@ -164,8 +165,8 @@ final class HTTP2StreamChannel: Channel, ChannelCore {
164165
self.streamID = streamID
165166
self.multiplexer = multiplexer
166167
self.windowManager = InboundWindowManager(targetSize: Int32(targetWindowSize))
167-
self._isActiveAtomic = .makeAtomic(value: false)
168-
self._isWritable = .makeAtomic(value: true)
168+
self._isActiveAtomic = .init(false)
169+
self._isWritable = .init(true)
169170
self.state = .idle
170171
self.streamDataType = streamDataType
171172
self.writabilityManager = StreamChannelFlowController(highWatermark: outboundBytesHighWatermark,
@@ -307,10 +308,10 @@ final class HTTP2StreamChannel: Channel, ChannelCore {
307308
}
308309
self.modifyingState { $0.networkActive() }
309310

310-
if self.writabilityManager.isWritable != self._isWritable.load() {
311+
if self.writabilityManager.isWritable != self._isWritable.load(ordering: .relaxed) {
311312
// We have probably delayed telling the user that this channel isn't writable, but we should do
312313
// it now.
313-
self._isWritable.store(self.writabilityManager.isWritable)
314+
self._isWritable.store(self.writabilityManager.isWritable, ordering: .relaxed)
314315
self.pipeline.fireChannelWritabilityChanged()
315316
}
316317

@@ -404,20 +405,20 @@ final class HTTP2StreamChannel: Channel, ChannelCore {
404405
}
405406

406407
public var isWritable: Bool {
407-
return self._isWritable.load()
408+
return self._isWritable.load(ordering: .relaxed)
408409
}
409410

410-
private let _isWritable: NIOAtomic<Bool>
411+
private let _isWritable: ManagedAtomic<Bool>
411412

412413
private var _isActive: Bool {
413414
return self.state == .active || self.state == .closing || self.state == .localActive
414415
}
415416

416417
public var isActive: Bool {
417-
return self._isActiveAtomic.load()
418+
return self._isActiveAtomic.load(ordering: .relaxed)
418419
}
419420

420-
private let _isActiveAtomic: NIOAtomic<Bool>
421+
private let _isActiveAtomic: ManagedAtomic<Bool>
421422

422423
public var _channelCore: ChannelCore {
423424
return self
@@ -663,7 +664,7 @@ final class HTTP2StreamChannel: Channel, ChannelCore {
663664
}
664665

665666
private func changeWritability(to newWritability: Bool) {
666-
self._isWritable.store(newWritability)
667+
self._isWritable.store(newWritability, ordering: .relaxed)
667668
self.pipeline.fireChannelWritabilityChanged()
668669
}
669670

@@ -869,7 +870,7 @@ internal extension HTTP2StreamChannel {
869870
// Do nothing here.
870871
return
871872
case .remoteActive, .active, .closing, .closingNeverActivated, .closed:
872-
self._isWritable.store(localValue)
873+
self._isWritable.store(localValue, ordering: .relaxed)
873874
self.pipeline.fireChannelWritabilityChanged()
874875
}
875876
}
@@ -884,7 +885,7 @@ extension HTTP2StreamChannel {
884885
// A helper function used to ensure that state modification leads to changes in the channel active atomic.
885886
private func modifyingState<ReturnType>(_ closure: (inout StreamChannelState) throws -> ReturnType) rethrows -> ReturnType {
886887
defer {
887-
self._isActiveAtomic.store(self._isActive)
888+
self._isActiveAtomic.store(self._isActive, ordering: .relaxed)
888889
}
889890
return try closure(&self.state)
890891
}

0 commit comments

Comments
 (0)