Просмотр исходного кода

Properly protect network observer work in the serial queue.

Ryan Olson лет назад: 11
Родитель
Сommit
f13e39450c
1 измененных файлов с 18 добавлено и 16 удалено
  1. 18 16
      Classes/Network/PonyDebugger/FLEXNetworkObserver.m

+ 18 - 16
Classes/Network/PonyDebugger/FLEXNetworkObserver.m

@@ -832,26 +832,28 @@ static NSString *const kFLEXNetworkObserverEnableOnLaunchDefaultsKey = @"com.fle
 
 - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler delegate:(id<NSURLSessionDelegate>)delegate
 {
-    // willSendRequest does not exist in NSURLSession. Here's a workaround.
-    NSURLRequest *request = [self requestForTask:dataTask];
-    if (!request) {
-        request = dataTask.currentRequest;
-        [self setRequest:request forTask:dataTask];
+    [self performBlock:^{
+        // willSendRequest does not exist in NSURLSession. Here's a workaround.
+        NSURLRequest *request = [self requestForTask:dataTask];
+        if (!request) {
+            request = dataTask.currentRequest;
+            [self setRequest:request forTask:dataTask];
 
-        [[FLEXNetworkRecorder defaultRecorder] recordRequestWillBeSentWithRequestId:[self requestIDForTask:dataTask] request:request redirectResponse:nil requestMechanism:[NSString stringWithFormat:@"NSURLSessionDataTask (delegate: %@)", [delegate class]]];
-    }
+            [[FLEXNetworkRecorder defaultRecorder] recordRequestWillBeSentWithRequestId:[self requestIDForTask:dataTask] request:request redirectResponse:nil requestMechanism:[NSString stringWithFormat:@"NSURLSessionDataTask (delegate: %@)", [delegate class]]];
+        }
 
-    NSMutableData *dataAccumulator = nil;
-    if (response.expectedContentLength < 0) {
-        dataAccumulator = [[NSMutableData alloc] init];
-    } else {
-        dataAccumulator = [[NSMutableData alloc] initWithCapacity:(NSUInteger)response.expectedContentLength];
-    }
+        NSMutableData *dataAccumulator = nil;
+        if (response.expectedContentLength < 0) {
+            dataAccumulator = [[NSMutableData alloc] init];
+        } else {
+            dataAccumulator = [[NSMutableData alloc] initWithCapacity:(NSUInteger)response.expectedContentLength];
+        }
 
-    [self setAccumulatedData:dataAccumulator forTask:dataTask];
+        [self setAccumulatedData:dataAccumulator forTask:dataTask];
 
-    NSString *requestID = [self requestIDForTask:dataTask];
-    [[FLEXNetworkRecorder defaultRecorder] recordResponseReceivedWithRequestId:requestID request:dataTask.currentRequest response:response];
+        NSString *requestID = [self requestIDForTask:dataTask];
+        [[FLEXNetworkRecorder defaultRecorder] recordResponseReceivedWithRequestId:requestID request:dataTask.currentRequest response:response];
+    }];
 }
 
 - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data delegate:(id<NSURLSessionDelegate>)delegate