前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >多线程下base库里可能的死锁重入问题。

多线程下base库里可能的死锁重入问题。

作者头像
龙泉寺扫地僧
发布2020-03-19 21:42:32
8120
发布2020-03-19 21:42:32
举报
文章被收录于专栏:盟主来了盟主来了

问题是这样的,blink线程的void WaitableEvent::Wait() 里会卡死,等待UI线程。但UI线程可能在等blink线程的npapi真窗口响应消息。

理论上的解决方式,应该是blink线程不放真窗口,但实在要改太多东西,现在我只好折中一下,把void WaitableEvent::Wait()里加上消息循环,临时处理下真窗口消息。

但这样又有重入的问题:

     KernelBase.dll!_DebugBreak@0    未知      node.dll!logging::LogMessage::Init    C++      node.dll!logging::LogMessage::LogMessage    C++      node.dll!gpu::gles2::GLES2Implementation::SingleThreadChecker::SingleThreadChecker    C++      node.dll!gpu::gles2::GLES2Implementation::Viewport    C++      node.dll!gpu_blink::WebGraphicsContext3DImpl::viewport    C++      node.dll!blink::WebGLRenderingContextBase::viewport    C++      node.dll!blink::WebGLRenderingContextV8Internal::viewportMethod    C++      node.dll!blink::WebGLRenderingContextV8Internal::viewportMethodCallback    C++      node.dll!v8::internal::FunctionCallbackArguments::Call    C++      node.dll!v8::internal::`anonymous namespace'::HandleApiCallHelper<0>    C++      node.dll!v8::internal::Builtin_Impl_HandleApiCall    C++      node.dll!v8::internal::Builtin_HandleApiCall    C++      3d28607e    未知      node.dll!v8::internal::`anonymous namespace'::Invoke    C++      node.dll!v8::internal::Execution::Call    C++      node.dll!v8::Function::Call    C++      node.dll!blink::V8ScriptRunner::callFunction    C++      node.dll!blink::ScriptController::callFunction    C++      node.dll!blink::V8FrameRequestCallback::handleEvent    C++      node.dll!blink::FrameRequestCallbackCollection::executeCallbacks    C++      node.dll!blink::ScriptedAnimationController::executeCallbacks    C++      node.dll!blink::ScriptedAnimationController::serviceScriptedAnimations    C++      node.dll!blink::Document::serviceScriptedAnimations    C++      node.dll!blink::PageAnimator::serviceScriptedAnimations    C++      node.dll!blink::PageWidgetDelegate::animate    C++      node.dll!blink::WebViewImpl::beginFrame    C++      node.dll!content::WebPageImpl::onBeginMainFrame    C++      node.dll!content::RenderWidgetCompositor::BeginMainFrame    C++      node.dll!cc::LayerTreeHost::BeginMainFrame    C++      node.dll!cc::ThreadProxy::BeginMainFrame    C++      node.dll!base::internal::RunnableAdapter<void (__thiscall cc::ThreadProxy::*)(scoped_ptr<cc::ThreadProxy::BeginMainFrameAndCommitState,base::DefaultDeleter<cc::ThreadProxy::BeginMainFrameAndCommitState> >)>::Run    C++      node.dll!base::internal::InvokeHelper<1,void,base::internal::RunnableAdapter<void (__thiscall cc::ThreadProxy::*)(scoped_ptr<cc::ThreadProxy::BeginMainFrameAndCommitState,base::DefaultDeleter<cc::ThreadProxy::BeginMainFrameAndCommitState> >)>,base::internal::TypeList<base::WeakPtr<cc::ThreadProxy> const &,scoped_ptr<cc::ThreadProxy::BeginMainFrameAndCommitState,base::DefaultDeleter<cc::ThreadProxy::BeginMainFrameAndCommitState> > > >::MakeItSo    C++      node.dll!base::internal::Invoker<base::IndexSequence<0,1>,base::internal::BindState<base::internal::RunnableAdapter<void (__thiscall cc::ThreadProxy::*)(scoped_ptr<cc::ThreadProxy::BeginMainFrameAndCommitState,base::DefaultDeleter<cc::ThreadProxy::BeginMainFrameAndCommitState> >)>,void __cdecl(cc::ThreadProxy *,scoped_ptr<cc::ThreadProxy::BeginMainFrameAndCommitState,base::DefaultDeleter<cc::ThreadProxy::BeginMainFrameAndCommitState> >),base::internal::TypeList<base::WeakPtr<cc::ThreadProxy>,base::internal::PassedWrapper<scoped_ptr<cc::ThreadProxy::BeginMainFrameAndCommitState,base::DefaultDeleter<cc::ThreadProxy::BeginMainFrameAndCommitState> > > > >,base::internal::TypeList<base::internal::UnwrapTraits<base::WeakPtr<cc::ThreadProxy> >,base::internal::UnwrapTraits<base::internal::PassedWrapper<scoped_ptr<cc::ThreadProxy::BeginMainFrameAndCommitState,base::DefaultDeleter<cc::ThreadProxy::BeginMainFrameAndCommitState> > > > >,base::internal::InvokeHelper<1,void,base::internal::RunnableAdapter<void (__thiscall cc::ThreadProxy::*)(scoped_ptr<cc::ThreadProxy::BeginMainFrameAndCommitState,base::DefaultDeleter<cc::ThreadProxy::BeginMainFrameAndCommitState> >)>,base::internal::TypeList<base::WeakPtr<cc::ThreadProxy> const &,scoped_ptr<cc::ThreadProxy::BeginMainFrameAndCommitState,base::DefaultDeleter<cc::ThreadProxy::BeginMainFrameAndCommitState> > > >,void __cdecl(void)>::Run    C++      node.dll!base::Callback<void __cdecl(void)>::Run    C++      node.dll!base::debug::TaskAnnotator::RunTask    C++      node.dll!base::MessageLoop::RunTask    C++      node.dll!base::MessageLoop::DeferOrRunPendingTask    C++      node.dll!base::MessageLoop::DoWork    C++      node.dll!base::MessagePumpForUI::HandleWorkMessage    C++      node.dll!base::MessagePumpForUI::WndProcThunk    C++      node.dll!base::win::WrappedWindowProc<&base::MessagePumpForUI::WndProcThunk>    C++      user32.dll!_InternalCallWinProc@20    未知      user32.dll!_UserCallWinProcCheckWow@32    未知      user32.dll!_DispatchMessageWorker@8    未知      user32.dll!_DispatchMessageW@4    未知 >    node.dll!base::WaitableEvent::Wait    C++      node.dll!gpu::InProcessCommandBuffer::WaitForGetOffsetInRange    C++      node.dll!gpu::CommandBufferHelper::WaitForGetOffsetInRange    C++      node.dll!gpu::CommandBufferHelper::Finish    C++      node.dll!gpu::gles2::GLES2Implementation::WaitForCmd    C++      node.dll!gpu::gles2::GLES2Implementation::CheckFramebufferStatus    C++      node.dll!gpu_blink::WebGraphicsContext3DImpl::checkFramebufferStatus    C++      node.dll!blink::DrawingBuffer::resizeFramebuffer    C++      node.dll!blink::DrawingBuffer::reset    C++      node.dll!blink::WebGLRenderingContextBase::reshape    C++      node.dll!blink::HTMLCanvasElement::reset    C++      node.dll!blink::HTMLCanvasElement::parseAttribute    C++      node.dll!blink::Element::attributeChanged    C++      node.dll!blink::Element::didModifyAttribute    C++      node.dll!blink::Element::setAttributeInternal    C++      node.dll!blink::Element::setAttribute    C++      node.dll!blink::Element::setIntegralAttribute    C++      node.dll!blink::HTMLCanvasElement::setHeight    C++      node.dll!blink::HTMLCanvasElementV8Internal::heightAttributeSetter    C++      node.dll!blink::HTMLCanvasElementV8Internal::heightAttributeSetterCallback    C++      node.dll!v8::internal::FunctionCallbackArguments::Call    C++      node.dll!v8::internal::`anonymous namespace'::HandleApiCallHelper<0>    C++      node.dll!v8::internal::Builtins::InvokeApiFunction    C++      node.dll!v8::internal::Object::SetPropertyWithAccessor    C++      node.dll!v8::internal::Object::SetPropertyInternal    C++      node.dll!v8::internal::Object::SetProperty    C++      node.dll!v8::internal::StoreIC::Store    C++      node.dll!v8::internal::Runtime_StoreIC_Miss    C++      3d28607e    未知      node.dll!v8::internal::`anonymous namespace'::Invoke    C++      node.dll!v8::internal::Execution::Call    C++      node.dll!v8::Function::Call    C++      node.dll!blink::V8ScriptRunner::callFunction    C++      node.dll!blink::ScriptController::callFunction    C++      node.dll!blink::ScriptController::callFunction    C++      node.dll!blink::V8EventListener::callListenerFunction    C++      node.dll!blink::V8AbstractEventListener::invokeEventHandler    C++      node.dll!blink::V8AbstractEventListener::handleEvent    C++      node.dll!blink::V8AbstractEventListener::handleEvent    C++      node.dll!blink::EventTarget::fireEventListeners    C++      node.dll!blink::EventTarget::fireEventListeners    C++      node.dll!blink::Node::handleLocalEvents    C++      node.dll!blink::NodeEventContext::handleLocalEvents    C++      node.dll!blink::EventDispatcher::dispatchEventAtTarget    C++      node.dll!blink::EventDispatcher::dispatch    C++      node.dll!blink::EventDispatchMediator::dispatchEvent    C++      node.dll!blink::EventDispatcher::dispatchEvent    C++      node.dll!blink::Node::dispatchEvent    C++      node.dll!blink::HTMLImageLoader::dispatchLoadEvent    C++      node.dll!blink::ImageLoader::dispatchPendingLoadEvent    C++      node.dll!blink::ImageLoader::dispatchPendingEvent    C++      node.dll!blink::EventSender<blink::ImageLoader>::dispatchPendingEvents    C++      node.dll!blink::EventSender<blink::ImageLoader>::timerFired    C++      node.dll!blink::Timer<blink::EventSender<blink::ImageLoader> >::fired    C++      node.dll!blink::TimerBase::runInternal    C++      node.dll!blink::TimerBase::CancellableTimerTask::run    C++      node.dll!content::WebTimerBase::fired    C++      node.dll!content::WebThreadImpl::schedulerTasks    C++      node.dll!content::WebThreadImpl::fire    C++      node.dll!content::sharedTimerFiredFunction    C++      node.dll!content::TimerWindowWndProc    C++      user32.dll!_InternalCallWinProc@20    未知      user32.dll!_UserCallWinProcCheckWow@32    未知      user32.dll!_DispatchMessageWorker@8    未知      user32.dll!_DispatchMessageW@4    未知      node.dll!base::MessagePumpForUI::ProcessMessageHelper    C++      node.dll!base::MessagePumpForUI::ProcessNextWindowsMessage    C++      node.dll!base::MessagePumpForUI::DoRunLoop    C++      node.dll!base::MessagePumpWin::RunWithDispatcher    C++      node.dll!base::MessagePumpWin::Run    C++      node.dll!base::MessageLoop::RunHandler    C++      node.dll!base::RunLoop::Run    C++      node.dll!base::RunLoop::RunUntilIdle    C++      node.dll!base::MessageLoop::RunUntilIdle    C++      node.dll!content::OrigChromeMgr::runUntilIdle    C++      node.dll!wkeSetDebugConfig    C++      mb.dll!040fd7a9    未知      mb.dll!040fdca9    未知      mb.dll!04186d0d    未知      kernel32.dll!@BaseThreadInitThunk@12    未知      ntdll.dll!___RtlUserThreadStart@8    未知      ntdll.dll!__RtlUserThreadStart@8    未知 现在的解决方案是搞个重入禁止的标记。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-03-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档