From e867c922a7e2d37b92fd6f5da17d6aa9d99badc5 Mon Sep 17 00:00:00 2001 From: Oliver Letterer Date: Thu, 15 Aug 2013 22:36:48 +0200 Subject: [PATCH 1/2] Making AFHTTPRequestOperation.HTTPError atomic. --- AFNetworking/AFHTTPRequestOperation.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AFNetworking/AFHTTPRequestOperation.m b/AFNetworking/AFHTTPRequestOperation.m index be49c21..47ef4bc 100644 --- a/AFNetworking/AFHTTPRequestOperation.m +++ b/AFNetworking/AFHTTPRequestOperation.m @@ -110,7 +110,7 @@ static void AFSwizzleClassMethodWithClassAndSelectorUsingBlock(Class klass, SEL @interface AFHTTPRequestOperation () @property (readwrite, nonatomic, strong) NSURLRequest *request; @property (readwrite, nonatomic, strong) NSHTTPURLResponse *response; -@property (readwrite, nonatomic, strong) NSError *HTTPError; +@property (readwrite, strong) NSError *HTTPError; @end @implementation AFHTTPRequestOperation From c4d8a124966883389008410ed9895b448e68a4c1 Mon Sep 17 00:00:00 2001 From: Oliver Letterer Date: Tue, 20 Aug 2013 10:04:31 +0200 Subject: [PATCH 2/2] Now using AFURLConnectionOperation.lock for AFHTTPRequestOperation.HTTPError --- AFNetworking/AFHTTPRequestOperation.m | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/AFNetworking/AFHTTPRequestOperation.m b/AFNetworking/AFHTTPRequestOperation.m index 47ef4bc..324652b 100644 --- a/AFNetworking/AFHTTPRequestOperation.m +++ b/AFNetworking/AFHTTPRequestOperation.m @@ -108,6 +108,7 @@ static void AFSwizzleClassMethodWithClassAndSelectorUsingBlock(Class klass, SEL #pragma mark - @interface AFHTTPRequestOperation () +@property (readwrite, nonatomic, strong) NSRecursiveLock *lock; @property (readwrite, nonatomic, strong) NSURLRequest *request; @property (readwrite, nonatomic, strong) NSHTTPURLResponse *response; @property (readwrite, strong) NSError *HTTPError; @@ -117,9 +118,28 @@ static void AFSwizzleClassMethodWithClassAndSelectorUsingBlock(Class klass, SEL @synthesize HTTPError = _HTTPError; @synthesize successCallbackQueue = _successCallbackQueue; @synthesize failureCallbackQueue = _failureCallbackQueue; +@dynamic lock; @dynamic request; @dynamic response; +- (NSError *)HTTPError +{ + [self.lock lock]; + NSError *HTTPError = _HTTPError; + [self.lock unlock]; + + return HTTPError; +} + +- (void)setHTTPError:(NSError *)HTTPError +{ + [self.lock lock]; + if (HTTPError != _HTTPError) { + _HTTPError = HTTPError; + } + [self.lock unlock]; +} + - (void)dealloc { if (_successCallbackQueue) { #if !OS_OBJECT_USE_OBJC