@@ -156,23 +156,24 @@ internal class _ProtocolClient : NSObject, URLProtocolClient {
156
156
guard let session = task. session as? URLSession else { fatalError ( ) }
157
157
switch session. behaviour ( for: task) {
158
158
case . taskDelegate( let delegate) :
159
- guard let s = session as? URLSession else { fatalError ( ) }
160
- s. delegateQueue. addOperation {
161
- delegate. urlSession ( s, task: task, didCompleteWithError: nil )
159
+ session. delegateQueue. addOperation {
160
+ delegate. urlSession ( session, task: task, didCompleteWithError: nil )
162
161
task. state = . completed
162
+ session. taskRegistry. remove ( task)
163
163
}
164
164
case . noDelegate:
165
165
task. state = . completed
166
+ session. taskRegistry. remove ( task)
166
167
case . dataCompletionHandler( let completion) :
167
168
let data = Data ( )
168
169
guard let client = `protocol`. client else { fatalError ( ) }
169
170
client. urlProtocol ( `protocol`, didLoad: data)
170
171
return
171
172
case . downloadCompletionHandler( let completion) :
172
- guard let s = session as? URLSession else { fatalError ( ) }
173
- s. delegateQueue. addOperation {
173
+ session. delegateQueue. addOperation {
174
174
completion ( task. currentRequest? . url, task. response, nil )
175
175
task. state = . completed
176
+ session. taskRegistry. remove ( task)
176
177
}
177
178
}
178
179
}
@@ -194,6 +195,7 @@ internal class _ProtocolClient : NSObject, URLProtocolClient {
194
195
s. delegateQueue. addOperation {
195
196
completion ( data, task. response, nil )
196
197
task. state = . completed
198
+ s. taskRegistry. remove ( task)
197
199
}
198
200
default : return
199
201
}
@@ -204,24 +206,25 @@ internal class _ProtocolClient : NSObject, URLProtocolClient {
204
206
guard let session = task. session as? URLSession else { fatalError ( ) }
205
207
switch session. behaviour ( for: task) {
206
208
case . taskDelegate( let delegate) :
207
- guard let s = session as? URLSession else { fatalError ( ) }
208
- s. delegateQueue. addOperation {
209
- delegate. urlSession ( s, task: task, didCompleteWithError: error as Error )
209
+ session. delegateQueue. addOperation {
210
+ delegate. urlSession ( session, task: task, didCompleteWithError: error as Error )
210
211
task. state = . completed
212
+ session. taskRegistry. remove ( task)
211
213
}
212
214
case . noDelegate:
213
215
task. state = . completed
216
+ session. taskRegistry. remove ( task)
214
217
case . dataCompletionHandler( let completion) :
215
- guard let s = session as? URLSession else { fatalError ( ) }
216
- s. delegateQueue. addOperation {
218
+ session. delegateQueue. addOperation {
217
219
completion ( nil , nil , error)
218
220
task. state = . completed
221
+ session. taskRegistry. remove ( task)
219
222
}
220
223
case . downloadCompletionHandler( let completion) :
221
- guard let s = session as? URLSession else { fatalError ( ) }
222
- s. delegateQueue. addOperation {
224
+ session. delegateQueue. addOperation {
223
225
completion ( nil , nil , error)
224
226
task. state = . completed
227
+ session. taskRegistry. remove ( task)
225
228
}
226
229
}
227
230
}
0 commit comments