Skip to content

Commit a13ab83

Browse files
authored
#25 Hang reading isConnected (#26)
#25 Hang reading isConnected
1 parent a4a04bf commit a13ab83

File tree

2 files changed

+14
-10
lines changed

2 files changed

+14
-10
lines changed

Sources/OTPKit/Components/Consumer.swift

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ final public class OTPConsumer: Component {
114114

115115
/// Whether the consumer is able to send/receive data (thread-safe).
116116
public var isConnected: Bool {
117-
get { Self.socketDelegateQueue.sync { _isConnected } }
117+
get { Self.queue.sync(flags: .barrier) { _isConnected } }
118118
}
119119

120120
/// The private socket consumer send/receive status.
@@ -338,7 +338,7 @@ final public class OTPConsumer: Component {
338338
try unicastSocket.startListening()
339339
try multicast4Socket?.startListening(multicastGroups: [IPv4.advertisementMessageHostname])
340340
try multicast6Socket?.startListening(multicastGroups: [IPv6.advertisementMessageHostname])
341-
Self.socketDelegateQueue.sync {
341+
Self.queue.sync(flags: .barrier) {
342342
self._isConnected = true
343343
}
344344

@@ -1607,9 +1607,11 @@ extension OTPConsumer: ComponentSocketDelegate {
16071607

16081608
*/
16091609
func socketDidClose(_ socket: ComponentSocket, withError error: Error?) {
1610-
if self._isConnected != false {
1611-
self._isConnected = false
1612-
delegateQueue.async { self.consumerDelegate?.disconnected(self, with: error) }
1610+
Self.queue.sync(flags: .barrier) {
1611+
if self._isConnected != false {
1612+
self._isConnected = false
1613+
delegateQueue.async { self.consumerDelegate?.disconnected(self, with: error) }
1614+
}
16131615
}
16141616
}
16151617

Sources/OTPKit/Components/Producer.swift

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ final public class OTPProducer: Component {
133133

134134
/// Whether the producer is able to send/receive data (thread-safe).
135135
public var isConnected: Bool {
136-
get { Self.socketDelegateQueue.sync { _isConnected } }
136+
get { Self.queue.sync(flags: .barrier) { _isConnected } }
137137
}
138138

139139
/// The private socket producer send/receive status.
@@ -367,7 +367,7 @@ final public class OTPProducer: Component {
367367
try unicastSocket.startListening()
368368
try multicast4Socket?.startListening(multicastGroups: [IPv4.advertisementMessageHostname])
369369
try multicast6Socket?.startListening(multicastGroups: [IPv6.advertisementMessageHostname])
370-
Self.socketDelegateQueue.sync {
370+
Self.queue.sync(flags: .barrier) {
371371
self._isConnected = true
372372
}
373373

@@ -1883,9 +1883,11 @@ extension OTPProducer: ComponentSocketDelegate {
18831883

18841884
*/
18851885
func socketDidClose(_ socket: ComponentSocket, withError error: Error?) {
1886-
if self._isConnected != false {
1887-
self._isConnected = false
1888-
delegateQueue.async { self.producerDelegate?.disconnected(self, with: error) }
1886+
Self.queue.sync(flags: .barrier) {
1887+
if self._isConnected != false {
1888+
self._isConnected = false
1889+
delegateQueue.async { self.producerDelegate?.disconnected(self, with: error) }
1890+
}
18891891
}
18901892
}
18911893

0 commit comments

Comments
 (0)