From 7c8205caa00f671cf1b7ecb67041d689b78f4a28 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Latour Date: Thu, 23 Jan 2014 11:33:33 -0800 Subject: [PATCH] Don't use dispatch_release() under ARC in OS X 10.8 or iOS 6.0 and later --- CGDWebServer/GCDWebServer.m | 2 +- CGDWebServer/GCDWebServerConnection.m | 4 ++-- CGDWebServer/GCDWebServerPrivate.h | 8 ++++++++ 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CGDWebServer/GCDWebServer.m b/CGDWebServer/GCDWebServer.m index f63fe62..9b43a6b 100644 --- a/CGDWebServer/GCDWebServer.m +++ b/CGDWebServer/GCDWebServer.m @@ -282,7 +282,7 @@ static void _NetServiceClientCallBack(CFNetServiceRef service, CFStreamError* er } dispatch_source_cancel(_source); // This will close the socket - dispatch_release(_source); + ARC_DISPATCH_RELEASE(_source); _source = NULL; LOG_VERBOSE(@"%@ stopped", [self class]); diff --git a/CGDWebServer/GCDWebServerConnection.m b/CGDWebServer/GCDWebServerConnection.m index 594379f..b92b30e 100644 --- a/CGDWebServer/GCDWebServerConnection.m +++ b/CGDWebServer/GCDWebServerConnection.m @@ -201,7 +201,7 @@ static dispatch_queue_t _formatterQueue = NULL; #endif }); [self _writeBuffer:buffer withCompletionBlock:block]; - dispatch_release(buffer); + ARC_DISPATCH_RELEASE(buffer); } - (void)_writeHeadersWithCompletionBlock:(WriteHeadersCompletionBlock)block { @@ -226,7 +226,7 @@ static dispatch_queue_t _formatterQueue = NULL; } }]; - dispatch_release(wrapper); + ARC_DISPATCH_RELEASE(wrapper); } else if (result < 0) { LOG_ERROR(@"Failed reading response body on socket %i (error %i)", _socket, (int)result); block(NO); diff --git a/CGDWebServer/GCDWebServerPrivate.h b/CGDWebServer/GCDWebServerPrivate.h index 4d7d036..496d0be 100644 --- a/CGDWebServer/GCDWebServerPrivate.h +++ b/CGDWebServer/GCDWebServerPrivate.h @@ -25,6 +25,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#import + #if __has_feature(objc_arc) #define ARC_BRIDGE __bridge #define ARC_BRIDGE_RELEASE(__OBJECT__) CFBridgingRelease(__OBJECT__) @@ -32,6 +34,11 @@ #define ARC_RELEASE(__OBJECT__) #define ARC_AUTORELEASE(__OBJECT__) __OBJECT__ #define ARC_DEALLOC(__OBJECT__) +#if (TARGET_OS_IPHONE && (__IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_6_0)) || (!TARGET_OS_IPHONE && (__MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_8)) +#define ARC_DISPATCH_RELEASE(__OBJECT__) +#else +#define ARC_DISPATCH_RELEASE(__OBJECT__) dispatch_release(__OBJECT__) +#endif #else #define ARC_BRIDGE #define ARC_BRIDGE_RELEASE(__OBJECT__) [(id)__OBJECT__ autorelease] @@ -39,6 +46,7 @@ #define ARC_RELEASE(__OBJECT__) [__OBJECT__ release] #define ARC_AUTORELEASE(__OBJECT__) [__OBJECT__ autorelease] #define ARC_DEALLOC(__OBJECT__) [__OBJECT__ dealloc] +#define ARC_DISPATCH_RELEASE(__OBJECT__) dispatch_release(__OBJECT__) #endif #import "GCDWebServerConnection.h"