@@ -172,31 +172,31 @@ extension Atlantis {
172172extension Atlantis : InjectorDelegate {
173173
174174 func injectorSessionDidCallResume( task: URLSessionTask ) {
175- // Since it's not possible to revert the Method Swizzling change
176- // We use isEnable instead
177- guard Atlantis . isEnabled. value else { return }
178- queue. async { [ weak self] in
179- guard let strongSelf = self else { return }
175+ // Use sync to prevent task.currentRequest.httpBody is nil
176+ // If we use async, sometime the httpbody is released -> Atlantis could get the Request's body
177+ // It's safe to use sync here because URL has their own background queue
178+ queue. sync {
179+ // Since it's not possible to revert the Method Swizzling change
180+ // We use isEnable instead
181+ guard Atlantis . isEnabled. value else { return }
180182
181183 // Cache
182- _ = strongSelf . getPackage ( task)
184+ _ = getPackage ( task)
183185 }
184186 }
185187
186188 func injectorSessionDidReceiveResponse( dataTask: URLSessionTask , response: URLResponse ) {
187- guard Atlantis . isEnabled. value else { return }
188- queue. async { [ weak self] in
189- guard let strongSelf = self else { return }
190- let package = strongSelf. getPackage ( dataTask)
189+ queue. sync {
190+ guard Atlantis . isEnabled. value else { return }
191+ let package = getPackage ( dataTask)
191192 package ? . updateResponse ( response)
192193 }
193194 }
194195
195196 func injectorSessionDidReceiveData( dataTask: URLSessionTask , data: Data ) {
196- guard Atlantis . isEnabled. value else { return }
197- queue. async { [ weak self] in
198- guard let strongSelf = self else { return }
199- let package = strongSelf. getPackage ( dataTask)
197+ queue. sync {
198+ guard Atlantis . isEnabled. value else { return }
199+ let package = getPackage ( dataTask)
200200 package ? . append ( data)
201201 }
202202 }
@@ -206,21 +206,19 @@ extension Atlantis: InjectorDelegate {
206206 }
207207
208208 func injectorConnectionDidReceive( connection: NSURLConnection , response: URLResponse ) {
209- guard Atlantis . isEnabled. value else { return }
210- queue. async { [ weak self] in
211- guard let strongSelf = self else { return }
209+ queue. sync {
210+ guard Atlantis . isEnabled. value else { return }
212211
213212 // Cache
214- let package = strongSelf . getPackage ( connection)
213+ let package = getPackage ( connection)
215214 package ? . updateResponse ( response)
216215 }
217216 }
218217
219218 func injectorConnectionDidReceive( connection: NSURLConnection , data: Data ) {
220- guard Atlantis . isEnabled. value else { return }
221- queue. async { [ weak self] in
222- guard let strongSelf = self else { return }
223- let package = strongSelf. getPackage ( connection)
219+ queue. sync {
220+ guard Atlantis . isEnabled. value else { return }
221+ let package = getPackage ( connection)
224222 package ? . append ( data)
225223 }
226224 }
@@ -239,10 +237,9 @@ extension Atlantis: InjectorDelegate {
239237extension Atlantis {
240238
241239 private func handleDidFinish( _ taskOrConnection: AnyObject , error: Error ? ) {
242- guard Atlantis . isEnabled. value else { return }
243- queue. async { [ weak self] in
244- guard let strongSelf = self else { return }
245- guard let package = strongSelf. getPackage ( taskOrConnection) else {
240+ queue. sync {
241+ guard Atlantis . isEnabled. value else { return }
242+ guard let package = getPackage ( taskOrConnection) else {
246243 return
247244 }
248245
@@ -251,10 +248,10 @@ extension Atlantis {
251248
252249 // At this time, the package has all the data
253250 // It's time to send it
254- strongSelf . startSendingMessage ( package : package )
251+ startSendingMessage ( package : package )
255252
256253 // Then remove it from our cache
257- strongSelf . packages. removeValue ( forKey: package . id)
254+ packages. removeValue ( forKey: package . id)
258255 }
259256 }
260257
0 commit comments