CefDoMessageLoopWork causes hang

Having problems with building or using CEF's C/C++ APIs? This forum is here to help. Please do not post bug reports or feature requests here.

CefDoMessageLoopWork causes hang

Postby GoodGuySoft » Sat Oct 08, 2016 8:50 am

I use CEF3 in MFC dialog based application. It is attractive to not run browser messages loop on separate thread to avoid extra complexity. So, it looks logical to run CefDoMessageLoopWork on timer.
I created timer that fires event each 20 milliseconds and call CefDoMessageLoopWork in this timer routine. However, for any reason application hangs in guaranteed way after some minutes of running. Does anyone understand the reason? Stack trace follows:

ntdll.dll!000000007722d42a() Unknown
ntdll.dll!00000000772a0edd() Unknown
kernel32.dll!000000007700b618() Unknown
> libcef.dll!base::ConditionVariable::TimedWait(const base::TimeDelta & max_time) Line 37 C++
libcef.dll!base::ConditionVariable::Wait() Line 27 C++
libcef.dll!mojo::edk::Waiter::Wait(unsigned __int64 deadline, unsigned __int64 * context) Line 65 C++
libcef.dll!mojo::edk::Core::WaitManyInternal(const unsigned int * handles, const unsigned int * signals, unsigned int num_handles, unsigned __int64 deadline, unsigned int * result_index, mojo::edk::HandleSignalsState * signals_states) Line 1169 C++
libcef.dll!mojo::edk::Core::Wait(unsigned int handle, unsigned int signals, unsigned __int64 deadline, MojoHandleSignalsState * signals_state) Line 416 C++
libcef.dll!MojoWaitImpl(unsigned int handle, unsigned int signals, unsigned __int64 deadline, MojoHandleSignalsState * signals_state) Line 36 C++
libcef.dll!MojoWait(unsigned int handle, unsigned int signals, unsigned __int64 deadline, MojoHandleSignalsState * signals_state) Line 31 C++
libcef.dll!mojo::Wait(mojo::Handle handle, unsigned int signals, unsigned __int64 deadline, MojoHandleSignalsState * signals_state) Line 191 C++
libcef.dll!mojo::SyncHandleRegistry::WatchAllHandles(const bool * * should_stop, unsigned __int64 count) Line 75 C++
libcef.dll!IPC::SyncChannel::WaitForReply(mojo::SyncHandleRegistry * registry, IPC::SyncChannel::SyncContext * context, bool pump_messages) Line 622 C++
libcef.dll!IPC::SyncChannel::Send(IPC::Message * message) Line 587 C++
libcef.dll!gpu::GpuChannelHost::Send(IPC::Message * msg) Line 121 C++
libcef.dll!gpu::GpuChannelHost::ValidateFlushIDReachedServer(int stream_id, bool force_validate) Line 326 C++
libcef.dll!gpu::CommandBufferProxyImpl::EnsureWorkVisible() Line 561 C++
libcef.dll!gpu::gles2::GLES2Implementation::VerifySyncTokensCHROMIUM(char * * sync_tokens, int count) Line 5965 C++
libcef.dll!cc::ResourceProvider::DeleteAndReturnUnusedResourcesToChild(std::_List_iterator<std::_List_val<std::_List_simple_types<std::pair<int const ,cc::ResourceProvider::Child> > > > child_it, cc::ResourceProvider::DeleteStyle style, const std::vector<unsigned int,std::allocator<unsigned int> > & unused) Line 1758 C++
libcef.dll!cc::ResourceProvider::DeclareUsedResourcesFromChild(int child, const std::unordered_set<unsigned int,std::hash<unsigned int>,std::equal_to<unsigned int>,std::allocator<unsigned int> > & resources_from_child) Line 1539 C++
libcef.dll!cc::SurfaceAggregator::PrewalkTree(const cc::SurfaceId & surface_id, bool in_moved_pixel_pass, cc::RenderPassId parent_pass, cc::SurfaceAggregator::PrewalkResult * result) Line 647 C++
libcef.dll!cc::SurfaceAggregator::PrewalkTree(const cc::SurfaceId & surface_id, bool in_moved_pixel_pass, cc::RenderPassId parent_pass, cc::SurfaceAggregator::PrewalkResult * result) Line 666 C++
libcef.dll!cc::SurfaceAggregator::Aggregate(const cc::SurfaceId & surface_id) Line 782 C++
libcef.dll!cc::Display::DrawAndSwap() Line 242 C++
libcef.dll!cc::DisplayScheduler::DrawAndSwap() Line 131 C++
libcef.dll!cc::DisplayScheduler::AttemptDrawAndSwap() Line 338 C++
libcef.dll!cc::DisplayScheduler::OnBeginFrameDeadline() Line 354 C++
libcef.dll!base::internal::FunctorTraits<void (__cdecl cc::DisplayScheduler::*)(void) __ptr64,void>::Invoke<base::WeakPtr<cc::DisplayScheduler> const & __ptr64>(void(cc::DisplayScheduler::*)() method, const base::WeakPtr<cc::DisplayScheduler> & receiver_ptr) Line 215 C++
libcef.dll!base::internal::InvokeHelper<1,void>::MakeItSo<void (__cdecl cc::DisplayScheduler::*const & __ptr64)(void) __ptr64,base::WeakPtr<cc::DisplayScheduler> const & __ptr64>(void(cc::DisplayScheduler::*)() & functor, const base::WeakPtr<cc::DisplayScheduler> & weak_ptr) Line 306 C++
libcef.dll!base::internal::Invoker<base::internal::BindState<void (__cdecl cc::DisplayScheduler::*)(void) __ptr64,base::WeakPtr<cc::DisplayScheduler> >,void __cdecl(void)>::RunImpl<void (__cdecl cc::DisplayScheduler::*const & __ptr64)(void) __ptr64,std::tuple<base::WeakPtr<cc::DisplayScheduler> > const & __ptr64,0>(void(cc::DisplayScheduler::*)() & functor, const std::tuple<base::WeakPtr<cc::DisplayScheduler> > & bound, base::IndexSequence<0> __formal) Line 350 C++
libcef.dll!base::internal::Invoker<base::internal::BindState<void (__cdecl cc::DisplayScheduler::*)(void) __ptr64,base::WeakPtr<cc::DisplayScheduler> >,void __cdecl(void)>::Run(base::internal::BindStateBase * base) Line 328 C++
libcef.dll!base::Callback<void __cdecl(void),1>::Run() Line 389 C++
libcef.dll!base::CancelableCallback<void __cdecl(void)>::Forward() Line 109 C++
libcef.dll!base::internal::FunctorTraits<void (__cdecl base::CancelableCallback<void __cdecl(void)>::*)(void)const __ptr64,void>::Invoke<base::WeakPtr<base::CancelableCallback<void __cdecl(void)> > const & __ptr64>(void(const base::CancelableCallback<void __cdecl(void)>::*)() method, const base::WeakPtr<base::CancelableCallback<void __cdecl(void)> > & receiver_ptr) Line 235 C++
libcef.dll!base::internal::InvokeHelper<1,void>::MakeItSo<void (__cdecl base::CancelableCallback<void __cdecl(void)>::*const & __ptr64)(void)const __ptr64,base::WeakPtr<base::CancelableCallback<void __cdecl(void)> > const & __ptr64>(void(const base::CancelableCallback<void __cdecl(void)>::*)() & functor, const base::WeakPtr<base::CancelableCallback<void __cdecl(void)> > & weak_ptr) Line 306 C++
libcef.dll!base::internal::Invoker<base::internal::BindState<void (__cdecl base::CancelableCallback<void __cdecl(void)>::*)(void)const __ptr64,base::WeakPtr<base::CancelableCallback<void __cdecl(void)> > >,void __cdecl(void)>::RunImpl<void (__cdecl base::CancelableCallback<void __cdecl(void)>::*const & __ptr64)(void)const __ptr64,std::tuple<base::WeakPtr<base::CancelableCallback<void __cdecl(void)> > > const & __ptr64,0>(void(const base::CancelableCallback<void __cdecl(void)>::*)() & functor, const std::tuple<base::WeakPtr<base::CancelableCallback<void __cdecl(void)> > > & bound, base::IndexSequence<0> __formal) Line 350 C++
libcef.dll!base::internal::Invoker<base::internal::BindState<void (__cdecl base::CancelableCallback<void __cdecl(void)>::*)(void)const __ptr64,base::WeakPtr<base::CancelableCallback<void __cdecl(void)> > >,void __cdecl(void)>::Run(base::internal::BindStateBase * base) Line 328 C++
libcef.dll!base::Callback<void __cdecl(void),1>::Run() Line 389 C++
libcef.dll!base::debug::TaskAnnotator::RunTask(const char * queue_function, const base::PendingTask & pending_task) Line 56 C++
libcef.dll!base::MessageLoop::RunTask(const base::PendingTask & pending_task) Line 486 C++
libcef.dll!base::MessageLoop::DeferOrRunPendingTask(base::PendingTask pending_task) Line 497 C++
libcef.dll!base::MessageLoop::DoWork() Line 618 C++
libcef.dll!base::MessagePumpForUI::DoRunLoop() Line 262 C++
libcef.dll!base::MessagePumpWin::Run(base::MessagePump::Delegate * delegate) Line 142 C++
libcef.dll!base::MessageLoop::RunHandler() Line 449 C++
libcef.dll!base::RunLoop::Run() Line 36 C++
libcef.dll!base::RunLoop::RunUntilIdle() Line 44 C++
libcef.dll!CefBrowserMessageLoop::DoMessageLoopIteration() Line 123 C++
libcef.dll!CefDoMessageLoopWork() Line 182 C++
libcef.dll!cef_do_message_loop_work() Line 350 C++
Program.exe!CefDoMessageLoopWork() Line 342 C++
Program.exe!CCaptchaObjectorDlg::OnBrowserTimer() Line 247 C++
GoodGuySoft
Newbie
 
Posts: 9
Joined: Fri Sep 30, 2016 7:19 am

Re: CefDoMessageLoopWork causes hang

Postby magreenblatt » Tue Oct 11, 2016 12:22 pm

What OS and CEF version? Does the problem reproduce with cefclient when using the `--external-message-pump` command-line flag?
magreenblatt
Site Admin
 
Posts: 12409
Joined: Fri May 29, 2009 6:57 pm


Return to Support Forum

Who is online

Users browsing this forum: No registered users and 57 guests