QCefView
QCefView copied to clipboard
[BUG]: QCefViwe释放 Crash
Describe the bug 【Bug描述】
... 使用OSR模式, 因为一些网页首次加载较耗时, 采用"提前加载"一些网页以达到提速的效果, 这时创建的QCefView是隐藏的, 在释放QCefView的时候发生Crash, 后发现正常显示的内嵌页也有Crash现象,只是Crash的较少, 原因都是主线程释放QCefVew/Private时, 后台线程会通用CCefClientDelegate访问资源,一共有下面几个场景
- CefViewBrowserClient::GetViewRect(CefRefPtr<CefBrowser> browser, CefRect& rect) 内部delegate为空时返回的窗口size为0导致内部Crash, 该问题已修复
- CCefClientDelegate::faviconChanged(CefRefPtr<CefImage> image) 内部pCefViewPrivate_->q_ptr->faviconChanged(icon);// 此时q_ptr已释放导致信号发送Crash,通过将pCefViewPrivate通过QPointer定义解决
- CefViewBrowserClient::OnFaviconURLChange(CefRefPtr<CefBrowser> browser, const std::vector<CefString>& icon_urls) 内部delegate->faviconURLChanged(browser, icon_urls); Crash, 当问题3出来时感觉这是一类问题, 感觉通过判空从根本上无法解决这类问题, 请教如何解决该类问题, 3Q
To Reproduce 【复现步骤】
- Go to '...'
- Click on '....'
- Scroll down to '....'
- See error
- 以上问题均通过bugsplat采集的用户数据, 1、2本地通过调试断点可稳定复现(让QCefView先释放)
Expected behavior 【正确的预期行为】
...
Screenshots 【截图】
...
Environment 【BUG产生的环境】
- OSR/NCW Mode: OSR
- OS & Version: [e.g. Windows/macOS/Linux] Windows
- Qt Version: 5.15.2
- CEF Version: 89.0.4389.114 工作模式采用独立进程A管理QCefView(主要做网页预加载及创建QCefView然后嵌入主程序), 主程序B启动内嵌页时将A进程窗口句柄内嵌到主程序中实现,
Additional context 【更多额外信息】
...