From ea6d45c0d29460d8c86900765c92dda6ba991dfe Mon Sep 17 00:00:00 2001 From: darin Date: Thu, 21 Oct 2004 17:04:37 +0000 Subject: [PATCH] Reviewed by John. - fixed 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 | 13 +++++++++++ WebKit/WebCoreSupport.subproj/WebImageRenderer.m | 29 ++++++++---------------- 2 files changed, 23 insertions(+), 19 deletions(-) diff --git a/WebKit/ChangeLog b/WebKit/ChangeLog index ff640e5..da4985a 100644 --- a/WebKit/ChangeLog +++ b/WebKit/ChangeLog @@ -1,3 +1,16 @@ +2004-10-21 Darin Adler + + Reviewed by John. + + - fixed 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 Reviewed by Dave. diff --git a/WebKit/WebCoreSupport.subproj/WebImageRenderer.m b/WebKit/WebCoreSupport.subproj/WebImageRenderer.m index 03ab663..73b2f708 100644 --- a/WebKit/WebCoreSupport.subproj/WebImageRenderer.m +++ b/WebKit/WebCoreSupport.subproj/WebImageRenderer.m @@ -288,7 +288,7 @@ - (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 )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 -- 1.8.3.1