diff options
author | Peter Varga <pvarga@inf.u-szeged.hu> | 2015-07-08 14:18:50 +0200 |
---|---|---|
committer | Peter Varga <pvarga@inf.u-szeged.hu> | 2015-07-14 11:49:52 +0000 |
commit | bf784bdf4350c178f030d34532fdd33953dac95a (patch) | |
tree | d8dc1804352058405961dbb26809744cc8c29e85 /src/core/web_engine_context.cpp | |
parent | 7345ef65af262eb0b958905d7175cc836821cf25 (diff) |
Fix single-process mode
Destroy RenderprocesHostimpl first then the WebEngineContext.
RenderProcessHostImpl's destructor may use the default BrowserContext
stored by the WebEngineContext.
Task-number: QTBUG-45722
Change-Id: Ide8875a89bd339ecf65ddd32a5f00842102c1c43
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@theqtcompany.com>
Diffstat (limited to 'src/core/web_engine_context.cpp')
-rw-r--r-- | src/core/web_engine_context.cpp | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/src/core/web_engine_context.cpp b/src/core/web_engine_context.cpp index 10d6bdd74..8bc047321 100644 --- a/src/core/web_engine_context.cpp +++ b/src/core/web_engine_context.cpp @@ -91,6 +91,10 @@ scoped_refptr<WebEngineContext> sContext; void destroyContext() { + // Destroy WebEngineContext before its static pointer is zeroed and destructor called. + // Before destroying MessageLoop via destroying BrowserMainRunner destructor + // WebEngineContext's pointer is used. + sContext->destroy(); sContext = 0; } @@ -136,9 +140,13 @@ bool usingQtQuick2DRenderer() } // namespace -WebEngineContext::~WebEngineContext() +void WebEngineContext::destroyBrowserContext() { m_defaultBrowserContext = 0; +} + +void WebEngineContext::destroy() +{ delete m_globalQObject; m_globalQObject = 0; base::MessagePump::Delegate *delegate = m_runLoop->loop_; @@ -146,6 +154,15 @@ WebEngineContext::~WebEngineContext() while (delegate->DoWork()) { } GLContextHelper::destroy(); m_runLoop->AfterRun(); + + // Force to destroy RenderProcessHostImpl by destroying BrowserMainRunner. + // RenderProcessHostImpl should be destroyed before WebEngineContext since + // default BrowserContext might be used by the RenderprocessHostImpl's destructor. + m_browserRunner.reset(0); +} + +WebEngineContext::~WebEngineContext() +{ } scoped_refptr<WebEngineContext> WebEngineContext::current() |