Skip to content

Commit 713548e

Browse files
Michael-AirMapadolfo
authored andcommitted
Fix RunLoop Crash (aciidgh#40)
* Fix RunLoop Crash
1 parent 0978b7d commit 713548e

File tree

1 file changed

+16
-9
lines changed

1 file changed

+16
-9
lines changed

SwiftMQTT/SwiftMQTT/MQTTSessionStream.swift

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,12 @@ import Foundation
1111
protocol MQTTSessionStreamDelegate: class {
1212
func mqttReady(_ ready: Bool, in stream: MQTTSessionStream)
1313
func mqttErrorOccurred(in stream: MQTTSessionStream, error: Error?)
14-
func mqttReceived(in stream: MQTTSessionStream, _ read: StreamReader)
14+
func mqttReceived(in stream: MQTTSessionStream, _ read: StreamReader)
1515
}
1616

1717
class MQTTSessionStream: NSObject {
1818

19+
private var currentRunLoop: RunLoop!
1920
private let inputStream: InputStream?
2021
private let outputStream: OutputStream?
2122
private var sessionQueue: DispatchQueue
@@ -39,11 +40,17 @@ class MQTTSessionStream: NSObject {
3940

4041
inputStream?.delegate = self
4142
outputStream?.delegate = self
42-
43+
4344
sessionQueue.async { [weak self] in
44-
let currentRunLoop = RunLoop.current
45-
inputStream?.schedule(in: currentRunLoop, forMode: .defaultRunLoopMode)
46-
outputStream?.schedule(in: currentRunLoop, forMode: .defaultRunLoopMode)
45+
46+
guard let `self` = self else {
47+
return
48+
}
49+
50+
self.currentRunLoop = RunLoop.current
51+
inputStream?.schedule(in: self.currentRunLoop, forMode: .defaultRunLoopMode)
52+
outputStream?.schedule(in: self.currentRunLoop, forMode: .defaultRunLoopMode)
53+
4754
inputStream?.open()
4855
outputStream?.open()
4956
if ssl {
@@ -53,19 +60,19 @@ class MQTTSessionStream: NSObject {
5360
}
5461
if timeout > 0 {
5562
DispatchQueue.global().asyncAfter(deadline: .now() + timeout) {
56-
self?.connectTimeout()
63+
self.connectTimeout()
5764
}
5865
}
59-
currentRunLoop.run()
66+
self.currentRunLoop.run()
6067
}
6168
}
6269

6370
deinit {
6471
delegate = nil
6572
inputStream?.close()
66-
inputStream?.remove(from: .current, forMode: .defaultRunLoopMode)
73+
inputStream?.remove(from: currentRunLoop, forMode: .defaultRunLoopMode)
6774
outputStream?.close()
68-
outputStream?.remove(from: .current, forMode: .defaultRunLoopMode)
75+
outputStream?.remove(from: currentRunLoop, forMode: .defaultRunLoopMode)
6976
}
7077

7178
var write: StreamWriter? {

0 commit comments

Comments
 (0)