Fixed: <rdar://problem/3566336> CrashTracer: .2403 crashes at com.apple.WebKit:...
authorcblu <cblu@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 19 Aug 2004 17:33:36 +0000 (17:33 +0000)
committercblu <cblu@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 19 Aug 2004 17:33:36 +0000 (17:33 +0000)
        Reviewed by trey.

        * Misc.subproj/WebIconDatabase.m:
        (-[WebIconDatabase _updateFileDatabase]): pass WebFileDatabase copies of the mutable dictionaries or else they may be accessed on a separate thread as the main thread is modifying them

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

WebKit/ChangeLog
WebKit/Misc.subproj/WebIconDatabase.m

index c581b51c852216d92673dd9cce8b56bf1c281855..4ec42b219d059bcc0b9f09da0e9c75f0c8d2d13a 100644 (file)
@@ -1,3 +1,12 @@
+2004-08-19  Chris Blumenberg  <cblu@apple.com>
+
+       Fixed: <rdar://problem/3566336> CrashTracer: .2403 crashes at com.apple.WebKit: -[WebFileDatabase performSetObject:forKey:] + 0x94
+
+        Reviewed by trey.
+
+        * Misc.subproj/WebIconDatabase.m:
+        (-[WebIconDatabase _updateFileDatabase]): pass WebFileDatabase copies of the mutable dictionaries or else they may be accessed on a separate thread as the main thread is modifying them
+
 2004-08-18  Richard Williamson   <rjw@apple.com>
 
         Replace horrible pollForAppletInView: with new
index 88dd13c188a7da665dc121da8bfc43ae80774d2b..d0d902c15f1ac1eeef8baf1746e6caf1635138ef 100644 (file)
@@ -367,10 +367,17 @@ NSSize WebIconLargeSize = {128, 128};
     [_private->iconsToEraseWithURLs removeAllObjects];
     [_private->iconsToSaveWithURLs removeAllObjects];
 
-    // Save the icon dictionaries to disk
-    [fileDB setObject:_private->iconsOnDiskWithURLs    forKey:WebIconsOnDiskKey];
-    [fileDB setObject:_private->URLToIconURL           forKey:WebURLToIconURLKey];
-    [fileDB setObject:_private->iconURLToURLs          forKey:WebIconURLToURLsKey];
+    // Save the icon dictionaries to disk. Save them as mutable copies otherwise WebFileDatabase may access the 
+    // same dictionaries on a separate thread as it's being modified. We think this fixed 3566336.
+    NSMutableDictionary *iconsOnDiskWithURLsCopy = [_private->iconsOnDiskWithURLs mutableCopy];
+    NSMutableDictionary *URLToIconURLCopy = [_private->URLToIconURL mutableCopy];
+    NSMutableDictionary *iconURLToURLsCopy = [_private->iconURLToURLs mutableCopy];
+    [fileDB setObject:iconsOnDiskWithURLsCopy forKey:WebIconsOnDiskKey];
+    [fileDB setObject:URLToIconURLCopy forKey:WebURLToIconURLKey];
+    [fileDB setObject:iconURLToURLsCopy forKey:WebIconURLToURLsKey];
+    [iconsOnDiskWithURLsCopy release];
+    [URLToIconURLCopy release];
+    [iconURLToURLsCopy release];
 }
 
 - (BOOL)_hasIconForIconURL:(NSString *)iconURL;