Reviewed by John.
authordarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 21 Oct 2004 17:04:37 +0000 (17:04 +0000)
committerdarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 21 Oct 2004 17:04:37 +0000 (17:04 +0000)
        - fixed <rdar://problem/3847994> REGRESSION: reproducible exception in WebImageRenderer releasePatternColor; afterwards get crash or no more browsing

        * WebCoreSupport.subproj/WebImageRenderer.m:
        (-[WebInternalImage createRendererIfNeeded]): Replaced retainOrCopyIfNeeded with this.
        This returns nil if a copied renderer isn't needed, and returns a new renderer if a copy is.
        The old version was sometimes returning a WebInternalImage and other times a WebImageRenderer.
        (-[WebImageRenderer retainOrCopyIfNeeded]): Returns the result of createRendererIfNeeded
        or retains self and returns self.

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

WebKit/ChangeLog
WebKit/WebCoreSupport.subproj/WebImageRenderer.m

index ff640e5..da4985a 100644 (file)
@@ -1,3 +1,16 @@
+2004-10-21  Darin Adler  <darin@apple.com>
+
+        Reviewed by John.
+
+        - fixed <rdar://problem/3847994> REGRESSION: reproducible exception in WebImageRenderer releasePatternColor; afterwards get crash or no more browsing
+
+        * WebCoreSupport.subproj/WebImageRenderer.m:
+        (-[WebInternalImage createRendererIfNeeded]): Replaced retainOrCopyIfNeeded with this.
+        This returns nil if a copied renderer isn't needed, and returns a new renderer if a copy is.
+        The old version was sometimes returning a WebInternalImage and other times a WebImageRenderer.
+        (-[WebImageRenderer retainOrCopyIfNeeded]): Returns the result of createRendererIfNeeded
+        or retains self and returns self.
+
 2004-10-20  Darin Adler  <darin@apple.com>
 
         Reviewed by Dave.
index 03ab663..73b2f70 100644 (file)
 - (BOOL)isNull;
 - (void)increaseUseCount;
 - (void)decreaseUseCount;
-- (WebInternalImage *)retainOrCopyIfNeeded;
+- (WebImageRenderer *)createRendererIfNeeded;
 - (void)flushRasterCache;
 - (CGImageRef)imageRef;
 
@@ -540,24 +540,18 @@ static NSMutableSet *activeImageRenderers;
     useCount--;
 }
 
-- (WebInternalImage *)retainOrCopyIfNeeded
+- (WebImageRenderer *)createRendererIfNeeded
 {
-    WebInternalImage *copy;
-
     // If an animated image appears multiple times in a given page, we
     // must create multiple WebCoreImageRenderers so that each copy
     // animates. However, we don't want to incur the expense of
     // re-decoding for the very first use on a page, since QPixmap
     // assignment always calls this method, even when just fetching
     // the image from the cache for the first time for a page.
-    if (originalData && useCount){
-        copy = [[[WebImageRendererFactory sharedFactory] imageRendererWithData:originalData MIMEType:MIMEType] retain];
-    }
-    else {
-        copy = [self retain];
+    if (originalData && useCount) {
+        return [[[WebImageRendererFactory sharedFactory] imageRendererWithData:originalData MIMEType:MIMEType] retain];
     }
-
-    return copy;
+    return nil;
 }
 
 - copyWithZone:(NSZone *)zone
@@ -1282,15 +1276,12 @@ static NSMutableSet *activeImageRenderers;
 
 - (id <WebCoreImageRenderer>)retainOrCopyIfNeeded
 {
-    WebInternalImage *newImage = [image retainOrCopyIfNeeded];
-    if (newImage == image) {
-        [image release];
-        [self retain];
-        return self;
+    WebImageRenderer *newRenderer = [image createRendererIfNeeded];
+    if (newRenderer) {
+        return newRenderer;
     }
-    WebImageRenderer *newRenderer = [[WebImageRenderer alloc] init];
-    newRenderer->image = newImage;
-    return newRenderer;
+    [self retain];
+    return self;
 }
 
 - (void)increaseUseCount