Skip to content

Commit cfff80e

Browse files
authored
Fix for leaking session and delegate (#36)
1 parent cecc863 commit cfff80e

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

Source/LDSwiftEventSource.swift

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,9 @@ class EventSourceDelegate: NSObject, URLSessionDataDelegate {
139139
}
140140

141141
func start() {
142-
delegateQueue.async {
142+
delegateQueue.async { [weak self] in
143+
guard let self = self
144+
else { return }
143145
guard self.readyState == .raw
144146
else {
145147
self.logger.log(.info, "start() called on already-started EventSource object. Returning")
@@ -157,6 +159,7 @@ class EventSourceDelegate: NSObject, URLSessionDataDelegate {
157159
if previousState == .open {
158160
config.handler.onClosed()
159161
}
162+
urlSession?.invalidateAndCancel()
160163
}
161164

162165
func getLastEventId() -> String? { lastEventId }
@@ -181,8 +184,8 @@ class EventSourceDelegate: NSObject, URLSessionDataDelegate {
181184
private func connect() {
182185
logger.log(.info, "Starting EventSource client")
183186
let connectionHandler: ConnectionHandler = (
184-
setReconnectionTime: { reconnectionTime in self.reconnectTime = reconnectionTime },
185-
setLastEventId: { eventId in self.lastEventId = eventId }
187+
setReconnectionTime: { [weak self] reconnectionTime in self?.reconnectTime = reconnectionTime },
188+
setLastEventId: { [weak self] eventId in self?.lastEventId = eventId }
186189
)
187190
self.eventParser = EventParser(handler: self.config.handler, connectionHandler: connectionHandler)
188191
let task = urlSession?.dataTask(with: createRequest())
@@ -231,8 +234,8 @@ class EventSourceDelegate: NSObject, URLSessionDataDelegate {
231234
let sleep = maxSleep / 2 + Double.random(in: 0...(maxSleep / 2))
232235

233236
logger.log(.info, "Waiting %.3f seconds before reconnecting...", sleep)
234-
delegateQueue.asyncAfter(deadline: .now() + sleep) {
235-
self.connect()
237+
delegateQueue.asyncAfter(deadline: .now() + sleep) { [weak self] in
238+
self?.connect()
236239
}
237240
}
238241

0 commit comments

Comments
 (0)