Reviewed by Tim Hatcher.
authorthatcher <thatcher@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 23 Jun 2006 21:27:59 +0000 (21:27 +0000)
committerthatcher <thatcher@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 23 Jun 2006 21:27:59 +0000 (21:27 +0000)
        <rdar://problem/4223619> Safari crashed in -[NSFont __isSystemFont]
        CFRetain and CFRelease NSFont's when FontPlatformData has a reference.
        We only do this when GC is enabled for performance reasons.
        No tests possible.

        * platform/mac/FontPlatformData.h:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::~FontPlatformData):

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

WebCore/ChangeLog
WebCore/platform/mac/FontPlatformData.h

index 6dfafd6..0909b6a 100644 (file)
@@ -1,3 +1,16 @@
+2006-06-23  Patrick Beard  <beard@apple.com>
+
+        Reviewed by Tim Hatcher.
+
+        <rdar://problem/4223619> Safari crashed in -[NSFont __isSystemFont]
+        CFRetain and CFRelease NSFont's when FontPlatformData has a reference.
+        We only do this when GC is enabled for performance reasons.
+        No tests possible.
+
+        * platform/mac/FontPlatformData.h:
+        (WebCore::FontPlatformData::FontPlatformData):
+        (WebCore::FontPlatformData::~FontPlatformData):
+
 2006-06-23  Justin Garcia  <justin.garcia@apple.com>
 
         Reviewed by levi
index 723eade..06ea6e2 100644 (file)
@@ -32,6 +32,9 @@
 class NSFont;
 #endif
 
+#include <CoreFoundation/CFBase.h>
+#include <objc/objc-auto.h>
+
 namespace WebCore {
 
 struct FontPlatformData {
@@ -43,7 +46,21 @@ struct FontPlatformData {
 
     FontPlatformData(NSFont* f = 0, bool b = false, bool o = false)
     : font(f), syntheticBold(b), syntheticOblique(o)
-    {}
+    {
+        if (f && objc_collecting_enabled()) CFRetain(f); // fix for <rdar://problems/4223619>
+    }
+
+    FontPlatformData(const FontPlatformData& f)
+    {
+        font = (f.font && f.font != (NSFont*)-1 && objc_collecting_enabled()) ? (NSFont*)CFRetain(f.font) : f.font;
+        syntheticBold = f.syntheticBold;
+        syntheticOblique = f.syntheticOblique;
+    }
+
+    ~FontPlatformData()
+    {
+        if (font && font != (NSFont*)-1 && objc_collecting_enabled()) CFRelease(font);
+    }
 
     NSFont *font;
     bool syntheticBold;