Open gearsns opened 9 months ago
This should really be fixed upstream
in CEF
.
What is the call stack for the exception?
Since Dispose is called in DoClose, shouldn't it be fixed on the CefSharp side, not on the cef side?
The call stack for the exception is as follows:
libcef.dll!AlloyBrowserHostImpl::DestroyBrowser() Line 600 C++
libcef.dll!AlloyBrowserHostImpl::CloseContents(content::WebContents * source) Line 1040 C++
[Inline Frame] libcef.dll!base::OnceCallback<void ()>::Run() Line 154 C++
libcef.dll!base::TaskAnnotator::RunTaskImpl(base::PendingTask & pending_task) Line 201 C++
[Inline Frame] libcef.dll!base::TaskAnnotator::RunTask(perfetto::StaticString event_name, base::PendingTask & pending_task, base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::DoWorkImpl::<lambda_0> && args) Line 89 C++
[Inline Frame] libcef.dll!base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::DoWorkImpl(base::LazyNow * continuation_lazy_now) Line 461 C++
libcef.dll!base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::DoWork() Line 326 C++
libcef.dll!base::MessagePumpForUI::DoRunLoop() Line 214 C++
libcef.dll!base::MessagePumpWin::Run(base::MessagePump::Delegate * delegate) Line 80 C++
libcef.dll!base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::Run(bool application_tasks_allowed, base::TimeDelta timeout) Line 629 C++
libcef.dll!base::RunLoop::Run(const base::Location & location) Line 136 C++
> [Inline Frame] libcef.dll!CefMainRunner::RunMessageLoop() Line 312 C++
libcef.dll!CefUIThread::ThreadMain() Line 182 C++
libcef.dll!base::`anonymous namespace'::ThreadFunc(void * params) Line 133 C++
kernel32.dll!00007ff81e64257d() Unknown
ntdll.dll!00007ff81feeaa58() Unknown
Since Dispose is called in DoClose, shouldn't it be fixed on the CefSharp side, not on the cef side?
For me that's just hacking around the issue. Calling Dispose
(which calls CefBrowserHost::CloseBrowser
) works most of the time, there's a threading issue which means it throws some of the time. Even if we move the call in the same code, that won't fix user code.
The LifespanHandler
provided is just a default implementation. You can override the behaviour of the default implementation to workaround the issue in your own code.
If the CEF maintainer deems this as won't fix, then we can look at working around the issue.
Is there an existing issue for this?
CefSharp Version
120.1.80
Operating System
Windows 11
Architecture
x64
.Net Version
.Net 6.0
Implementation
WinForms
Reproduction Steps
Expected behavior
Expectations is that it will not crash when you close the popup window
Actual behavior
Regression?
No response
Known Workarounds
Is this due to DoClose in LifeSpanHandler.cs? Excluding control.Dispose() from InnvokeSyncOnUiThreadIfRequired stops crashing.
Does this problem also occur in the CEF Sample Application
No
Other information
html source
edit source code CefSharp.WinForms\Handler\LifeSpanhandler.cs
CefSharp.WinForms.Example\BrowserTabUserControl.cs