@@ -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