Reviewed by Kevin.
authordarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 19 Dec 2004 20:40:34 +0000 (20:40 +0000)
committerdarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 19 Dec 2004 20:40:34 +0000 (20:40 +0000)
        - some garbage collection fixes

        * Misc.subproj/WebNSObjectExtras.h: (WebCFAutorelease): Replaced the old WebNSRetainCFRelease with this
        much-easier-to-understand function cribbed from what David Harrison did in WebCore.

        * Misc.subproj/WebKitNSStringExtras.m: (+[NSString _web_encodingForResource:]): Use CFRelease here to
        get rid of an unnecessary use of WebNSRetainCFRelease.
        * Misc.subproj/WebNSURLExtras.m:
        (+[NSURL _web_URLWithData:relativeToURL:]): Use WebCFAutorelease instead of WebNSRetainCFRelease and autorelease.
        (-[NSURL _web_URLWithLowercasedScheme]): Ditto.
        (-[NSString _web_mapHostNameWithRange:encode:makeString:]): Use WebCFAutorelease here; the old code would not
        work correctly under GC.
        * Plugins.subproj/WebNetscapePluginPackage.m: (+[WebNetscapePluginPackage preferredLocalizationName]):
        Use WebCFAutorelease here; the old code would not work correctly under GC.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@8255 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebKit/ChangeLog
WebKit/Misc.subproj/WebKitNSStringExtras.m
WebKit/Misc.subproj/WebNSObjectExtras.h
WebKit/Misc.subproj/WebNSURLExtras.m
WebKit/Plugins.subproj/WebNetscapePluginPackage.m

index dc82eb59b1169bb66e722fddab6b18dd0e011ebb..1097f81d8e9ba039998c50468a35dcb6b31cc9b9 100644 (file)
@@ -1,3 +1,22 @@
+2004-12-19  Darin Adler  <darin@apple.com>
+
+        Reviewed by Kevin.
+
+        - some garbage collection fixes
+
+        * Misc.subproj/WebNSObjectExtras.h: (WebCFAutorelease): Replaced the old WebNSRetainCFRelease with this
+        much-easier-to-understand function cribbed from what David Harrison did in WebCore.
+
+        * Misc.subproj/WebKitNSStringExtras.m: (+[NSString _web_encodingForResource:]): Use CFRelease here to
+        get rid of an unnecessary use of WebNSRetainCFRelease.
+        * Misc.subproj/WebNSURLExtras.m:
+        (+[NSURL _web_URLWithData:relativeToURL:]): Use WebCFAutorelease instead of WebNSRetainCFRelease and autorelease.
+        (-[NSURL _web_URLWithLowercasedScheme]): Ditto.
+        (-[NSString _web_mapHostNameWithRange:encode:makeString:]): Use WebCFAutorelease here; the old code would not
+        work correctly under GC.
+        * Plugins.subproj/WebNetscapePluginPackage.m: (+[WebNetscapePluginPackage preferredLocalizationName]):
+        Use WebCFAutorelease here; the old code would not work correctly under GC.
+
 2004-12-18  Chris Blumenberg  <cblu@apple.com>
 
        Fixed: <rdar://problem/3766915> PDF content needs search to work
index ca0bf89ae356cfb8d689f8d81e5f09c58860969e..29682c24743526de7508b9cfa2afbf9a2baf03ed 100644 (file)
@@ -161,15 +161,15 @@ static BOOL canUseFastRenderer (const UniChar *buffer, unsigned length)
     }
     
     NSString *directoryName = [[path stringByDeletingPathExtension] lastPathComponent];
-    NSString *locale = WebNSRetainCFRelease(CFLocaleCreateCanonicalLocaleIdentifierFromString(NULL, (CFStringRef)directoryName));
-    if (locale == nil) {
+    CFStringRef locale = CFLocaleCreateCanonicalLocaleIdentifierFromString(NULL, (CFStringRef)directoryName);
+    if (locale == NULL) {
         return NSMacOSRomanStringEncoding;
     }
             
     LangCode lang;
     RegionCode region;
-    error = LocaleStringToLangAndRegionCodes([locale UTF8String], &lang, &region);
-    [locale release];
+    error = LocaleStringToLangAndRegionCodes([(NSString *)locale UTF8String], &lang, &region);
+    CFRelease(locale);
     if (error != noErr) {
         return NSMacOSRomanStringEncoding;
     }
index 5e47d9666ad30e127da3b069725f6cbde31572ed..740debd98c76e9d90fb0b56c223740c6d99f0e6e 100644 (file)
@@ -5,13 +5,18 @@
 
 #import <Foundation/Foundation.h>
 
-static inline id WebNSRetainCFRelease(CFTypeRef obj)
+// Use WebCFAutorelease to return an object made by a CoreFoundation
+// "create" or "copy" function as an autoreleased and garbage collected
+// object. CF objects need to be "made collectable" for autorelease to work
+// properly under GC.
+
+static inline id WebCFAutorelease(CFTypeRef obj)
 {
-#if BUILDING_ON_PANTHER
-    return (id)obj;
-#else
-    return (id)CFMakeCollectable(obj);
+#if !BUILDING_ON_PANTHER
+    if (obj) CFMakeCollectable(obj);
 #endif
+    [(id)obj autorelease];
+    return (id)obj;
 }
 
 #if BUILDING_ON_PANTHER
index b9aaad884f935eac81896d4552fe0dbc47f1bcfe..10a8346778e2437ea7274e2b9c11e07ddce730c8 100644 (file)
@@ -341,11 +341,10 @@ static NSString *mapHostNames(NSString *string, BOOL encode)
         // (e.g calls to NSURL -path). However, this function is not tolerant of illegal UTF-8 sequences, which
         // could either be a malformed string or bytes in a different encoding, like shift-jis, so we fall back
         // onto using ISO Latin 1 in those cases.
-        result = WebNSRetainCFRelease(CFURLCreateAbsoluteURLWithBytes(NULL, bytes, length, kCFStringEncodingUTF8, (CFURLRef)baseURL, YES));
+        result = WebCFAutorelease(CFURLCreateAbsoluteURLWithBytes(NULL, bytes, length, kCFStringEncodingUTF8, (CFURLRef)baseURL, YES));
         if (!result) {
-            result = WebNSRetainCFRelease(CFURLCreateAbsoluteURLWithBytes(NULL, bytes, length, kCFStringEncodingISOLatin1, (CFURLRef)baseURL, YES));
+            result = WebCFAutorelease(CFURLCreateAbsoluteURLWithBytes(NULL, bytes, length, kCFStringEncodingISOLatin1, (CFURLRef)baseURL, YES));
         }
-        [result autorelease];
     }
     else {
         result = [NSURL URLWithString:@""];
@@ -569,7 +568,7 @@ static NSString *mapHostNames(NSString *string, BOOL encode)
     }
     
     NSURL *result = changed
-        ? [WebNSRetainCFRelease(CFURLCreateAbsoluteURLWithBytes(NULL, buffer, bytesFilled, kCFStringEncodingUTF8, nil, YES)) autorelease]
+        ? WebCFAutorelease(CFURLCreateAbsoluteURLWithBytes(NULL, buffer, bytesFilled, kCFStringEncodingUTF8, nil, YES))
         : self;
 
     if (buffer != static_buffer) {
@@ -790,10 +789,8 @@ static NSString *mapHostNames(NSString *string, BOOL encode)
     NSString *string = self;
     if (encode && [self rangeOfString:@"%" options:NSLiteralSearch range:range].location != NSNotFound) {
         NSString *substring = [self substringWithRange:range];
-        substring = (NSString *)CFURLCreateStringByReplacingPercentEscapes(NULL, (CFStringRef)substring, CFSTR(""));
+        substring = WebCFAutorelease(CFURLCreateStringByReplacingPercentEscapes(NULL, (CFStringRef)substring, CFSTR("")));
         if (substring != nil) {
-            string = [[substring retain] autorelease];
-            CFRelease(substring);
             range = NSMakeRange(0, [string length]);
         }
     }
index 9963341310970f2846dcb074db1dc0698f86262b..d2c5b9f62a8e557f57d858e7a603e39eb0b3c83f 100644 (file)
@@ -7,6 +7,7 @@
 
 #import <WebKit/WebKitLogging.h>
 #import <WebKit/WebKitNSStringExtras.h>
+#import <WebKit/WebNSObjectExtras.h>
 
 #import <JavaScriptCore/npruntime_impl.h>
 
@@ -52,8 +53,7 @@ static TransitionVector tVectorForFunctionPointer(FunctionPointer);
     CFStringEncoding stringEncoding;
 
     CFBundleGetLocalizationInfoForLocalization(NULL, &languageCode, &regionCode, &scriptCode, &stringEncoding);
-    NSString *localizationName = (NSString *)CFBundleCopyLocalizationForLocalizationInfo(languageCode, regionCode, scriptCode, stringEncoding);
-    return [localizationName autorelease];
+    return WebCFAutorelease(CFBundleCopyLocalizationForLocalizationInfo(languageCode, regionCode, scriptCode, stringEncoding));
 }
 
 - (SInt16)openResourceFile