From 530f19e9561a4c684271ba5ba612a68cacc51ba7 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Mon, 23 May 2016 12:57:46 +0900 Subject: [PATCH] Fix crash due to site_instace being freed early --- atom/browser/atom_browser_client.cc | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/atom/browser/atom_browser_client.cc b/atom/browser/atom_browser_client.cc index 2202566..5a6b494 100644 --- a/atom/browser/atom_browser_client.cc +++ b/atom/browser/atom_browser_client.cc @@ -52,6 +52,9 @@ bool g_suppress_renderer_process_restart = false; // Custom schemes to be registered to handle service worker. std::string g_custom_service_worker_schemes = ""; +void Noop(scoped_refptr) { +} + } // namespace // static @@ -133,6 +136,13 @@ void AtomBrowserClient::OverrideSiteInstanceForNavigation( content::SiteInstance::CreateForURL(browser_context, url); *new_instance = site_instance.get(); + // Make sure the |site_instance| is not freed when this function returns. + // FIXME(zcbenz): We should adjust OverrideSiteInstanceForNavigation's + // interface to solve this. + content::BrowserThread::PostTask( + content::BrowserThread::UI, FROM_HERE, + base::Bind(&Noop, base::RetainedRef(site_instance))); + // Remember the original renderer process of the pending renderer process. auto current_process = current_instance->GetProcess(); auto pending_process = (*new_instance)->GetProcess(); -- 2.7.4