diff --git a/SDWebImage/Core/SDWebImageManager.m b/SDWebImage/Core/SDWebImageManager.m index 6bddcfc2..3b29632d 100644 --- a/SDWebImage/Core/SDWebImageManager.m +++ b/SDWebImage/Core/SDWebImageManager.m @@ -17,9 +17,7 @@ static id _defaultImageCache; static id _defaultImageLoader; -@interface SDWebImageCombinedOperation () { - SD_LOCK_DECLARE(_cancelledLock); // a lock to keep the access to `cancelled` thread-safe -} +@interface SDWebImageCombinedOperation () @property (assign, nonatomic, getter = isCancelled) BOOL cancelled; @property (strong, nonatomic, readwrite, nullable) id loaderOperation; @@ -805,39 +803,22 @@ static id _defaultImageLoader; @implementation SDWebImageCombinedOperation -- (instancetype)init { - if (self = [super init]) { - SD_LOCK_INIT(_cancelledLock); - } - - return self; -} - -- (BOOL)isCancelled { - BOOL isCancelled = NO; - SD_LOCK(_cancelledLock); - isCancelled = _cancelled; - SD_UNLOCK(_cancelledLock); - return isCancelled; -} - - (void)cancel { - SD_LOCK(_cancelledLock); - if (_cancelled) { - SD_UNLOCK(_cancelledLock); - return; + @synchronized(self) { + if (self.isCancelled) { + return; + } + self.cancelled = YES; + if (self.cacheOperation) { + [self.cacheOperation cancel]; + self.cacheOperation = nil; + } + if (self.loaderOperation) { + [self.loaderOperation cancel]; + self.loaderOperation = nil; + } + [self.manager safelyRemoveOperationFromRunning:self]; } - _cancelled = YES; - if (self.cacheOperation) { - [self.cacheOperation cancel]; - self.cacheOperation = nil; - } - if (self.loaderOperation) { - [self.loaderOperation cancel]; - self.loaderOperation = nil; - } - [self.manager safelyRemoveOperationFromRunning:self]; - SD_UNLOCK(_cancelledLock); } @end