CefView / QCefView

A Qt Widget encapsulated CEF view based on QWidget
https://cefview.github.io/QCefView/
GNU Lesser General Public License v2.1
502 stars 133 forks source link

[BUG]: QCefViwe释放 Crash #345

Open double-ing opened 8 months ago

double-ing commented 8 months ago

Describe the bug 【Bug描述】

... 使用OSR模式, 因为一些网页首次加载较耗时, 采用"提前加载"一些网页以达到提速的效果, 这时创建的QCefView是隐藏的, 在释放QCefView的时候发生Crash, 后发现正常显示的内嵌页也有Crash现象,只是Crash的较少, 原因都是主线程释放QCefVew/Private时, 后台线程会通用CCefClientDelegate访问资源,一共有下面几个场景

  1. CefViewBrowserClient::GetViewRect(CefRefPtr browser, CefRect& rect) 内部delegate为空时返回的窗口size为0导致内部Crash, 该问题已修复
  2. CCefClientDelegate::faviconChanged(CefRefPtr image) 内部pCefViewPrivate_->q_ptr->faviconChanged(icon);// 此时q_ptr已释放导致信号发送Crash,通过将pCefViewPrivate通过QPointer定义解决
  3. CefViewBrowserClient::OnFaviconURLChange(CefRefPtr browser, const std::vector& icon_urls) 内部delegate->faviconURLChanged(browser, icon_urls); Crash, 当问题3出来时感觉这是一类问题, 感觉通过判空从根本上无法解决这类问题, 请教如何解决该类问题, 3Q

To Reproduce 【复现步骤】

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. See error
  5. 以上问题均通过bugsplat采集的用户数据, 1、2本地通过调试断点可稳定复现(让QCefView先释放)

Expected behavior 【正确的预期行为】

...

Screenshots 【截图】

... image

image

image

Environment 【BUG产生的环境】

Additional context 【更多额外信息】

...

L-Super commented 8 months ago

对于已知问题,欢迎提交PR。

L-Super commented 4 months ago

对于问题2,由于稳定性问题,目前已移除此接口。 对于问题3,https://github.com/CefView/CefViewCore/commit/a6969ff3f3438323f1b88fb4d3296d339b163cb0 应该修复了此问题