From efad06f50649a47cf7f316b40f87ab1b8910ed0c Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Latour Date: Wed, 9 Apr 2014 11:10:45 -0700 Subject: [PATCH] __unsafe_unretained does not prevent self retain-cycles when not under ARC --- CGDWebServer/GCDWebServer.m | 4 ++++ GCDWebDAVServer/GCDWebDAVServer.m | 4 ++++ GCDWebUploader/GCDWebUploader.m | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/CGDWebServer/GCDWebServer.m b/CGDWebServer/GCDWebServer.m index a60535d..c5e5872 100644 --- a/CGDWebServer/GCDWebServer.m +++ b/CGDWebServer/GCDWebServer.m @@ -663,7 +663,11 @@ static void _NetServiceClientCallBack(CFNetServiceRef service, CFStreamError* er - (void)addGETHandlerForBasePath:(NSString*)basePath directoryPath:(NSString*)directoryPath indexFilename:(NSString*)indexFilename cacheAge:(NSUInteger)cacheAge allowRangeRequests:(BOOL)allowRangeRequests { if ([basePath hasPrefix:@"/"] && [basePath hasSuffix:@"/"]) { +#if __has_feature(objc_arc) GCDWebServer* __unsafe_unretained server = self; +#else + __block GCDWebServer* server = self; +#endif [self addHandlerWithMatchBlock:^GCDWebServerRequest *(NSString* requestMethod, NSURL* requestURL, NSDictionary* requestHeaders, NSString* urlPath, NSDictionary* urlQuery) { if (![requestMethod isEqualToString:@"GET"]) { diff --git a/GCDWebDAVServer/GCDWebDAVServer.m b/GCDWebDAVServer/GCDWebDAVServer.m index 45003c3..7d46156 100644 --- a/GCDWebDAVServer/GCDWebDAVServer.m +++ b/GCDWebDAVServer/GCDWebDAVServer.m @@ -561,7 +561,11 @@ static inline xmlNodePtr _XMLChildWithName(xmlNodePtr child, const xmlChar* name - (instancetype)initWithUploadDirectory:(NSString*)path { if ((self = [super init])) { _uploadDirectory = [[path stringByStandardizingPath] copy]; +#if __has_feature(objc_arc) GCDWebDAVServer* __unsafe_unretained server = self; +#else + __block GCDWebDAVServer* server = self; +#endif // 9.1 PROPFIND method [self addDefaultHandlerForMethod:@"PROPFIND" requestClass:[GCDWebServerDataRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) { diff --git a/GCDWebUploader/GCDWebUploader.m b/GCDWebUploader/GCDWebUploader.m index 147b5b6..1f28c74 100644 --- a/GCDWebUploader/GCDWebUploader.m +++ b/GCDWebUploader/GCDWebUploader.m @@ -277,7 +277,11 @@ return nil; } _uploadDirectory = [[path stringByStandardizingPath] copy]; +#if __has_feature(objc_arc) GCDWebUploader* __unsafe_unretained server = self; +#else + __block GCDWebUploader* server = self; +#endif // Resource files [self addGETHandlerForBasePath:@"/" directoryPath:[siteBundle resourcePath] indexFilename:nil cacheAge:3600 allowRangeRequests:NO];