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