Skip to content

Commit 4644ea2

Browse files
committed
Fix data race thread sanitiser warnings
1 parent aa80720 commit 4644ea2

File tree

1 file changed

+26
-5
lines changed

1 file changed

+26
-5
lines changed

templates/swift/Sources/WebSockets/WebSocketClient.swift.twig

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import NIOFoundationCompat
77
import NIOSSL
88

99
public let WEBSOCKET_LOCKER_QUEUE = "SyncLocker"
10+
public let WEBSOCKET_THREAD_QUEUE = "ThreadLocker"
11+
public let WEBSOCKET_CHANNEL_QUEUE = "ChannelLocker"
1012

1113
/// Creates and manages connections to a WebSocket server.
1214
///
@@ -20,16 +22,35 @@ public class WebSocketClient {
2022
let query: String
2123
let headers: HTTPHeaders
2224
let frameKey: String
23-
25+
2426
public private(set) var maxFrameSize: Int
25-
26-
var channel: Channel? = nil
27+
2728
var tlsEnabled: Bool = false
2829
var closeSent: Bool = false
2930

30-
let locker = DispatchQueue(label: WEBSOCKET_LOCKER_QUEUE, qos: .background)
31+
private let locker = DispatchQueue(label: WEBSOCKET_LOCKER_QUEUE, qos: .background)
32+
private let channelQueue = DispatchQueue(label: WEBSOCKET_CHANNEL_QUEUE)
33+
private let threadGroupQueue = DispatchQueue(label: WEBSOCKET_THREAD_QUEUE)
3134

32-
var threadGroup: MultiThreadedEventLoopGroup? = nil
35+
var channel: Channel? {
36+
get {
37+
return channelQueue.sync { _channel }
38+
}
39+
set {
40+
channelQueue.sync { _channel = newValue }
41+
}
42+
}
43+
private var _channel: Channel? = nil
44+
45+
var threadGroup: MultiThreadedEventLoopGroup? {
46+
get {
47+
return threadGroupQueue.sync { _threadGroup }
48+
}
49+
set {
50+
threadGroupQueue.sync { _threadGroup = newValue }
51+
}
52+
}
53+
private var _threadGroup: MultiThreadedEventLoopGroup?
3354

3455
weak var delegate: WebSocketClientDelegate? = nil
3556

0 commit comments

Comments
 (0)