diff options
author | Allan Sandfeld Jensen <allan.jensen@theqtcompany.com> | 2016-08-30 12:46:45 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@theqtcompany.com> | 2016-08-30 12:47:20 +0200 |
commit | da6f33c8929bf122e7cdec5617d89c59d03e3632 (patch) | |
tree | 9d90d90a3e7cdd6fbca8d40b54a45e90877677e4 /src/core/web_engine_context.cpp | |
parent | 9cda8d4384825bd93b949f31953548beda165ef8 (diff) | |
parent | 327c9b9e0c68550e474d9ffdc21ece6324b5e7a1 (diff) |
Merge remote-tracking branch 'origin/5.7' into 5.8
Change-Id: I82f7a6a6d1bf27dc8adf7e2a91ea8ab29c54a607
Diffstat (limited to 'src/core/web_engine_context.cpp')
-rw-r--r-- | src/core/web_engine_context.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/core/web_engine_context.cpp b/src/core/web_engine_context.cpp index 426782f4e..0687b23c5 100644 --- a/src/core/web_engine_context.cpp +++ b/src/core/web_engine_context.cpp @@ -103,6 +103,7 @@ QT_END_NAMESPACE namespace { scoped_refptr<QtWebEngineCore::WebEngineContext> sContext; +static bool s_destroyed = false; void destroyContext() { @@ -111,6 +112,7 @@ void destroyContext() // WebEngineContext's pointer is used. sContext->destroy(); sContext = 0; + s_destroyed = true; } bool usingANGLE() @@ -189,18 +191,29 @@ void WebEngineContext::destroy() // RenderProcessHostImpl should be destroyed before WebEngineContext since // default BrowserContext might be used by the RenderprocessHostImpl's destructor. m_browserRunner.reset(0); + + // Drop the false reference. + sContext->Release(); } WebEngineContext::~WebEngineContext() { + // WebEngineContext::destroy() must be called before we are deleted + Q_ASSERT(!m_globalQObject); + Q_ASSERT(!m_devtools); + Q_ASSERT(!m_browserRunner); } scoped_refptr<WebEngineContext> WebEngineContext::current() { + if (s_destroyed) + return nullptr; if (!sContext.get()) { sContext = new WebEngineContext(); // Make sure that we ramp down Chromium before QApplication destroys its X connection, etc. qAddPostRoutine(destroyContext); + // Add a false reference so there is no race between unreferencing sContext and a global QApplication. + sContext->AddRef(); } return sContext; } |