From f4bdae687004e6691dcf9f703cad21c86f179880 Mon Sep 17 00:00:00 2001 From: Bogdan Poplauschi Date: Fri, 23 Sep 2016 20:46:30 +0300 Subject: [PATCH] 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 --- SDWebImage/SDWebImageDownloaderOperation.m | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/SDWebImage/SDWebImageDownloaderOperation.m b/SDWebImage/SDWebImageDownloaderOperation.m index 4c913b8f..615cc062 100644 --- a/SDWebImage/SDWebImageDownloaderOperation.m +++ b/SDWebImage/SDWebImageDownloaderOperation.m @@ -39,7 +39,6 @@ typedef NSMutableDictionary 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 SDCallbacksDictionary; self.dataTask = [session dataTaskWithRequest:self.request]; self.executing = YES; - self.thread = [NSThread currentThread]; } [self.dataTask resume]; @@ -197,20 +195,10 @@ typedef NSMutableDictionary 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 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 *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];