@@ -124,7 +124,7 @@ public final class StatsdClient: MetricsFactory {
124
124
private final class StatsdCounter : CounterHandler , Equatable {
125
125
let id : String
126
126
let client : Client
127
- var value = Atomic < Int64 > ( value: 0 )
127
+ var value = NIOAtomic < Int64> . makeAtomic ( value: 0 )
128
128
129
129
init ( label: String , dimensions: [ ( String , String ) ] , client: Client ) {
130
130
self . id = StatsdUtils . id ( label: label, dimensions: dimensions)
@@ -240,9 +240,10 @@ private final class StatsdTimer: TimerHandler, Equatable {
240
240
private final class Client {
241
241
private let eventLoopGroupProvider : StatsdClient . EventLoopGroupProvider
242
242
private let eventLoopGroup : EventLoopGroup
243
- private let isShutdown = Atomic < Bool > ( value : false )
243
+
244
244
private let address : SocketAddress
245
- private var channel : AtomicBox < Box < Channel ? > > = AtomicBox ( value: Box ( nil ) )
245
+
246
+ private let isShutdown = NIOAtomic< Bool> . makeAtomic( value: false )
246
247
247
248
init ( eventLoopGroupProvider: StatsdClient . EventLoopGroupProvider , address: SocketAddress ) {
248
249
self . eventLoopGroupProvider = eventLoopGroupProvider
@@ -256,7 +257,7 @@ private final class Client {
256
257
}
257
258
258
259
deinit {
259
- assert ( self . isShutdown. load ( ) , " client not stopped before the deinit. " )
260
+ precondition ( self . isShutdown. load ( ) , " client not stopped before the deinit. " )
260
261
}
261
262
262
263
func shutdown( _ callback: @escaping ( Error ? ) -> Void ) {
@@ -265,7 +266,7 @@ private final class Client {
265
266
if self . isShutdown. compareAndExchange ( expected: false , desired: true ) {
266
267
self . eventLoopGroup. shutdownGracefully ( callback)
267
268
}
268
- default :
269
+ case . shared :
269
270
self . isShutdown. store ( true )
270
271
callback ( nil )
271
272
}
@@ -278,20 +279,11 @@ private final class Client {
278
279
}
279
280
280
281
private func connect( ) -> EventLoopFuture < Channel > {
281
- if let channel = self . channel. load ( ) . value {
282
- return self . eventLoopGroup. next ( ) . makeSucceededFuture ( channel)
283
- }
284
-
285
282
let bootstrap = DatagramBootstrap ( group: self . eventLoopGroup)
286
283
. channelOption ( ChannelOptions . socket ( SocketOptionLevel ( SOL_SOCKET) , SO_REUSEADDR) , value: 1 )
287
284
. channelInitializer { channel in channel. pipeline. addHandler ( Encoder ( address: self . address) ) }
288
-
289
285
// the bind address is local and does not really matter, the remote address is addressed by AddressedEnvelope below
290
- let future = bootstrap. bind ( host: " 0.0.0.0 " , port: 0 )
291
- future. whenSuccess { channel in
292
- self . channel. store ( Box ( channel) )
293
- }
294
- return future
286
+ return bootstrap. bind ( host: " 0.0.0.0 " , port: 0 )
295
287
}
296
288
297
289
private final class Encoder : ChannelOutboundHandler {
0 commit comments