2011-06-22 Carlos Garcia Campos <cgarcia@igalia.com>
authorcarlosgc@webkit.org <carlosgc@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 23 Jun 2011 06:46:56 +0000 (06:46 +0000)
committercarlosgc@webkit.org <carlosgc@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 23 Jun 2011 06:46:56 +0000 (06:46 +0000)
        Reviewed by Martin Robinson.

        [UNIX] Increment/decrement module load conter in NetscapePluginModule::getPluginInfo()
        https://bugs.webkit.org/show_bug.cgi?id=63150

        Since the method is static, we are using
        NetscapePluginModule::getOrCreate() to get the module. If it's
        created, the load counter is 0, so that when module is deleted,
        shutdown() hasn't been called and the destructor crashes in the
        assert that checks the module has been removed from the
        initialized module list. We should increment the load counter, and
        decrement it before getPluginInfo() returns, so that
        decrementLoadCount() will call shutdown() if counter is 0 and the
        module will be deleted from the list.

        * Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp:
        (WebKit::NetscapePluginModule::getPluginInfo):

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

Source/WebKit2/ChangeLog
Source/WebKit2/Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp

index be8480f..9376072 100644 (file)
@@ -2,6 +2,26 @@
 
         Reviewed by Martin Robinson.
 
+        [UNIX] Increment/decrement module load conter in NetscapePluginModule::getPluginInfo()
+        https://bugs.webkit.org/show_bug.cgi?id=63150
+
+        Since the method is static, we are using
+        NetscapePluginModule::getOrCreate() to get the module. If it's
+        created, the load counter is 0, so that when module is deleted,
+        shutdown() hasn't been called and the destructor crashes in the
+        assert that checks the module has been removed from the
+        initialized module list. We should increment the load counter, and
+        decrement it before getPluginInfo() returns, so that
+        decrementLoadCount() will call shutdown() if counter is 0 and the
+        module will be deleted from the list.
+
+        * Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp:
+        (WebKit::NetscapePluginModule::getPluginInfo):
+
+2011-06-22  Carlos Garcia Campos  <cgarcia@igalia.com>
+
+        Reviewed by Martin Robinson.
+
         [UNIX] Check for npp directly when getting X display in NetscapeBrowserFuncs
         https://bugs.webkit.org/show_bug.cgi?id=63149
 
index 8c42250..bb42d01 100644 (file)
@@ -130,17 +130,23 @@ bool NetscapePluginModule::getPluginInfo(const String& pluginPath, PluginModuleI
     if (!pluginModule)
         return false;
 
+    pluginModule->incrementLoadCount();
+
     plugin.path = pluginPath;
     plugin.info.file = pathGetFileName(pluginPath);
 
     Module* module = pluginModule->module();
     NPP_GetValueProcPtr NPP_GetValue = module->functionPointer<NPP_GetValueProcPtr>("NP_GetValue");
-    if (!NPP_GetValue)
+    if (!NPP_GetValue) {
+        pluginModule->decrementLoadCount();
         return false;
+    }
 
     NP_GetMIMEDescriptionFuncPtr NP_GetMIMEDescription = module->functionPointer<NP_GetMIMEDescriptionFuncPtr>("NP_GetMIMEDescription");
-    if (!NP_GetMIMEDescription)
+    if (!NP_GetMIMEDescription) {
+        pluginModule->decrementLoadCount();
         return false;
+    }
 
     char* buffer = 0;
     NPError err = NPP_GetValue(0, NPPVpluginDescriptionString, &buffer);
@@ -148,11 +154,15 @@ bool NetscapePluginModule::getPluginInfo(const String& pluginPath, PluginModuleI
         plugin.info.desc = buffer;
 
     const char* mimeDescription = NP_GetMIMEDescription();
-    if (!mimeDescription)
+    if (!mimeDescription) {
+        pluginModule->decrementLoadCount();
         return false;
+    }
 
     setMIMEDescription(mimeDescription, plugin);
 
+    pluginModule->decrementLoadCount();
+
     return true;
 }