Title: [119042] branches/safari-536-branch/Source/WebKit2
Revision
119042
Author
lforsch...@apple.com
Date
2012-05-30 20:50:54 -0700 (Wed, 30 May 2012)

Log Message

Merged r118505 -> <rdar://problem/11527166>

Modified Paths

Diff

Modified: branches/safari-536-branch/Source/WebKit2/ChangeLog (119041 => 119042)


--- branches/safari-536-branch/Source/WebKit2/ChangeLog	2012-05-31 03:41:07 UTC (rev 119041)
+++ branches/safari-536-branch/Source/WebKit2/ChangeLog	2012-05-31 03:50:54 UTC (rev 119042)
@@ -1,5 +1,25 @@
 2012-05-30  Lucas Forschler  <lforsch...@apple.com>
 
+    Merge 118505
+
+    2012-05-24  Andreas Kling  <kl...@webkit.org>
+
+            Mac bots crashing under PluginInfo destructor.
+            <http://webkit.org/b/87414>
+            <rdar://problem/11527172>
+
+            Reviewed by Darin Adler.
+
+            We can't safely pass WTF::String to another thread without a deref() race,
+            so pass the PluginInfo vector by pointer instead of by value.
+
+            * UIProcess/WebContext.cpp:
+            (WebKit::WebContext::sendDidGetPlugins):
+            (WebKit::WebContext::handleGetPlugins):
+            * UIProcess/WebContext.h:
+
+2012-05-30  Lucas Forschler  <lforsch...@apple.com>
+
     Merge 118443
 
     2012-05-24  Brady Eidson  <beid...@apple.com>

Modified: branches/safari-536-branch/Source/WebKit2/UIProcess/WebContext.cpp (119041 => 119042)


--- branches/safari-536-branch/Source/WebKit2/UIProcess/WebContext.cpp	2012-05-31 03:41:07 UTC (rev 119041)
+++ branches/safari-536-branch/Source/WebKit2/UIProcess/WebContext.cpp	2012-05-31 03:50:54 UTC (rev 119042)
@@ -612,20 +612,20 @@
     m_visitedLinkProvider.addVisitedLink(linkHash);
 }
 
-void WebContext::sendDidGetPlugins(uint64_t requestID, const Vector<PluginInfo>& pluginInfos)
+void WebContext::sendDidGetPlugins(uint64_t requestID, PassOwnPtr<Vector<PluginInfo> > pluginInfos)
 {
     ASSERT(isMainThread());
 
-    Vector<PluginInfo> plugins(pluginInfos);
+    OwnPtr<Vector<PluginInfo> > plugins(pluginInfos);
 
 #if PLATFORM(MAC)
     // Add built-in PDF last, so that it's not used when a real plug-in is installed.
     // NOTE: This has to be done on the main thread as it calls localizedString().
     if (!omitPDFSupport())
-        plugins.append(BuiltInPDFView::pluginInfo());
+        plugins->append(BuiltInPDFView::pluginInfo());
 #endif
 
-    process()->send(Messages::WebProcess::DidGetPlugins(requestID, plugins), 0);
+    process()->send(Messages::WebProcess::DidGetPlugins(requestID, *plugins), 0);
 }
 
 void WebContext::handleGetPlugins(uint64_t requestID, bool refresh)
@@ -633,13 +633,15 @@
     if (refresh)
         m_pluginInfoStore.refresh();
 
-    Vector<PluginInfo> pluginInfos;
+    OwnPtr<Vector<PluginInfo> > pluginInfos = adoptPtr(new Vector<PluginInfo>);
 
     Vector<PluginModuleInfo> plugins = m_pluginInfoStore.plugins();
     for (size_t i = 0; i < plugins.size(); ++i)
-        pluginInfos.append(plugins[i].info);
+        pluginInfos->append(plugins[i].info);
 
-    RunLoop::main()->dispatch(bind(&WebContext::sendDidGetPlugins, this, requestID, pluginInfos));
+    // NOTE: We have to pass the PluginInfo vector to the secondary thread via a pointer as otherwise
+    //       we'd end up with a deref() race on all the WTF::Strings it contains.
+    RunLoop::main()->dispatch(bind(&WebContext::sendDidGetPlugins, this, requestID, pluginInfos.release()));
 }
 
 void WebContext::getPlugins(CoreIPC::Connection*, uint64_t requestID, bool refresh)

Modified: branches/safari-536-branch/Source/WebKit2/UIProcess/WebContext.h (119041 => 119042)


--- branches/safari-536-branch/Source/WebKit2/UIProcess/WebContext.h	2012-05-31 03:41:07 UTC (rev 119041)
+++ branches/safari-536-branch/Source/WebKit2/UIProcess/WebContext.h	2012-05-31 03:50:54 UTC (rev 119042)
@@ -261,7 +261,7 @@
     String platformDefaultLocalStorageDirectory() const;
 
     void handleGetPlugins(uint64_t requestID, bool refresh);
-    void sendDidGetPlugins(uint64_t requestID, const Vector<WebCore::PluginInfo>&);
+    void sendDidGetPlugins(uint64_t requestID, PassOwnPtr<Vector<WebCore::PluginInfo> >);
 
     ProcessModel m_processModel;
     
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to