Reviewed by Eric.
authortomernic <tomernic@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 28 Mar 2006 04:13:28 +0000 (04:13 +0000)
committertomernic <tomernic@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 28 Mar 2006 04:13:28 +0000 (04:13 +0000)
        <rdar://problem/3694093> -[WebBasePluginPackage finalize] is incorrect; design change needed

        Call -unload on plug-in packages instead of relying on -dealloc/-finalize to do it.  Currently
        the only place plug-in packages are deallocated is when refreshing the set of plugins, as when
        handling JavaScript's navigator.plugins.refresh().

        * Plugins/WebBasePluginPackage.m:
        (-[WebBasePluginPackage dealloc]):
        Assert that the plug-in has been unloaded by the time -dealloc is called.
        (-[WebBasePluginPackage finalize]):
        ditto

        * Plugins/WebPluginDatabase.m:
        (-[WebPluginDatabase refresh]):
        Call -unload on the plug-in packages before releasing them.

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

WebKit/ChangeLog
WebKit/Plugins/WebBasePluginPackage.m
WebKit/Plugins/WebPluginDatabase.m

index 2f6b476c67fcfde060fe7f7af465081293ab77e4..b700531b5389fbf4800a4aeb627338d886f1597c 100644 (file)
@@ -1,3 +1,23 @@
+2006-03-27  Tim Omernick  <timo@apple.com>
+
+        Reviewed by Eric.
+
+        <rdar://problem/3694093> -[WebBasePluginPackage finalize] is incorrect; design change needed
+
+        Call -unload on plug-in packages instead of relying on -dealloc/-finalize to do it.  Currently
+        the only place plug-in packages are deallocated is when refreshing the set of plugins, as when
+        handling JavaScript's navigator.plugins.refresh().
+
+        * Plugins/WebBasePluginPackage.m:
+        (-[WebBasePluginPackage dealloc]):
+        Assert that the plug-in has been unloaded by the time -dealloc is called.
+        (-[WebBasePluginPackage finalize]):
+        ditto
+
+        * Plugins/WebPluginDatabase.m:
+        (-[WebPluginDatabase refresh]):
+        Call -unload on the plug-in packages before releasing them.
+
 2006-03-27  Tim Omernick  <timo@apple.com>
 
         Reviewed by Tim Hatcher.
index 98f4ae930a3b281eb85b8964d20794141a21f47f..0f44b47873e1066924caff7c44303ac138b3917c 100644 (file)
@@ -28,6 +28,7 @@
 
 #import <WebKit/WebBasePluginPackage.h>
 
+#import <WebKit/WebAssertions.h>
 #import <WebKit/WebKitNSStringExtras.h>
 #import <WebKit/WebNetscapePluginPackage.h>
 #import <WebKit/WebNSObjectExtras.h>
 
 - (void)dealloc
 {
-    [self unload];
+    ASSERT(!isLoaded);
     
     [name release];
     [path release];
 
 - (void)finalize
 {
-    // FIXME: Bad design to unload at dealloc/finalize time.
-    // Must be fixed for GC.
-    [self unload];
+    ASSERT(!isLoaded);
+
     [super finalize];
 }
 
index 1666ed63d97c43f5f0d56e755655250a0db3f93c..f85e6f96cd2f1a3411e34f4cc0ca1b2800c95b1e 100644 (file)
@@ -211,7 +211,8 @@ static NSArray *pluginLocations(void)
             LOG(Plugins, "Removed plugins:\n%@", pluginsToUnload);
         }
         [reallyNewPlugins release];
-#endif   
+#endif
+        [pluginsToUnload makeObjectsPerformSelector:@selector(unload)];
         [plugins minusSet:pluginsToUnload];
         [plugins unionSet:newPlugins];   
         [pluginsToUnload release];