Explorar el Código

Fixed an issue with the `SDWebImageDownloaderOperation` : `cancelInternal` was not called because of the old mechanism rellying on the `thread` property - probably because that thread did not have a runloop. Removed that and now cancelInternal is called as expected

Bogdan Poplauschi hace 9 años
padre
commit
f4bdae6
Se han modificado 1 ficheros con 1 adiciones y 15 borrados
  1. 1 15
      SDWebImage/SDWebImageDownloaderOperation.m

+ 1 - 15
SDWebImage/SDWebImageDownloaderOperation.m

@@ -39,7 +39,6 @@ typedef NSMutableDictionary<NSString *, id> SDCallbacksDictionary;
 
 @property (strong, nonatomic, readwrite, nullable) NSURLSessionTask *dataTask;
 
-@property (strong, atomic, nullable) NSThread *thread;
 @property (SDDispatchQueueSetterSementics, nonatomic, nullable) dispatch_queue_t barrierQueue;
 
 #if SD_UIKIT
@@ -164,7 +163,6 @@ typedef NSMutableDictionary<NSString *, id> SDCallbacksDictionary;
         
         self.dataTask = [session dataTaskWithRequest:self.request];
         self.executing = YES;
-        self.thread = [NSThread currentThread];
     }
     
     [self.dataTask resume];
@@ -197,20 +195,10 @@ typedef NSMutableDictionary<NSString *, id> SDCallbacksDictionary;
 
 - (void)cancel {
     @synchronized (self) {
-        if (self.thread) {
-            [self performSelector:@selector(cancelInternalAndStop) onThread:self.thread withObject:nil waitUntilDone:NO];
-        }
-        else {
-            [self cancelInternal];
-        }
+        [self cancelInternal];
     }
 }
 
-- (void)cancelInternalAndStop {
-    if (self.isFinished) return;
-    [self cancelInternal];
-}
-
 - (void)cancelInternal {
     if (self.isFinished) return;
     [super cancel];
@@ -242,7 +230,6 @@ typedef NSMutableDictionary<NSString *, id> SDCallbacksDictionary;
     });
     self.dataTask = nil;
     self.imageData = nil;
-    self.thread = nil;
     if (self.ownedSession) {
         [self.ownedSession invalidateAndCancel];
         self.ownedSession = nil;
@@ -423,7 +410,6 @@ didReceiveResponse:(NSURLResponse *)response
 - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error {
     NSArray<id> *completionBlocks = [[self callbacksForKey:kCompletedCallbackKey] copy];
     @synchronized(self) {
-        self.thread = nil;
         self.dataTask = nil;
         dispatch_async(dispatch_get_main_queue(), ^{
             [[NSNotificationCenter defaultCenter] postNotificationName:SDWebImageDownloadStopNotification object:self];