Failing JunitTest_framework_complex

Kaganski Mike mikekaganski at hotmail.com
Wed Nov 21 13:01:25 UTC 2018


JunitTest_framework_complex fails reliably for me on current master with 
assertion

  assert( mpWindowContext.is() );

failing at OpenGLSalGraphicsImpl::doFlush().

I could debug it to WinOpenGLContext::ImplInit() having m_aGLWin.hDC == 
nullptr, thus ChoosePixelFormat fails. The call stack for this point is

====
	vclplug_winlo.dll!WinOpenGLSalGraphicsImpl::CreateWinContext
	vcllo.dll!OpenGLSalGraphicsImpl::doFlush
	vcllo.dll!OpenGLFlushIdle::Invoke
	vcllo.dll!Scheduler::ProcessTaskScheduling
	vcllo.dll!Scheduler::CallbackTaskScheduling
	vcllo.dll!SalTimer::CallCallback
	vclplug_winlo.dll!WinSalTimer::ImplHandleElapsedTimer
	vclplug_winlo.dll!ImplSalYield
	vclplug_winlo.dll!WinSalInstance::DoYield
	vcllo.dll!ImplYield
	vcllo.dll!Application::Yield
	vcllo.dll!Application::Execute
	sofficeapp.dll!desktop::Desktop::Main
	vcllo.dll!ImplSVMain
	vcllo.dll!SVMain
	sofficeapp.dll!soffice_main
	soffice.bin!sal_main
	soffice.bin!main
	soffice.bin!invoke_main
	soffice.bin!__scrt_common_main_seh
	soffice.bin!__scrt_common_main
	soffice.bin!mainCRTStartup
	kernel32.dll!BaseThreadInitThunk
	ntdll.dll!RtlUserThreadStart
====

The mrWinParent.mhLocalDC is nullptr here; the nullprt value has been 
set when it was released *before that event* in 
WinSalFrame::ReleaseFrameGraphicsDC with this call stack:

====
	vclplug_winlo.dll!WinSalGraphics::setHDC
	vclplug_winlo.dll!WinSalFrame::ReleaseFrameGraphicsDC
	vclplug_winlo.dll!WinSalFrame::ReleaseGraphics
	vcllo.dll!vcl::Window::ReleaseGraphics
	vcllo.dll!vcl::Window::dispose
	vcllo.dll!ImplBorderWindow::dispose
	vcllo.dll!VclReferenceBase::disposeOnce
	vcllo.dll!VclPtr<vcl::Window>::disposeAndClear
	vcllo.dll!vcl::Window::dispose
	vcllo.dll!Control::dispose
	vcllo.dll!Edit::dispose
	vcllo.dll!SpinField::dispose
	vcllo.dll!MetricField::dispose
	vcllo.dll!VclReferenceBase::disposeOnce
	vcllo.dll!VclPtr<vcl::Window>::disposeAndClear
	vcllo.dll!VclBuilder::disposeBuilder
	vcllo.dll!VclBuilderContainer::disposeBuilder
	svxlo.dll!PanelLayout::dispose
	svxlo.dll!svx::sidebar::ParaPropertyPanel::dispose
	vcllo.dll!VclReferenceBase::disposeOnce
	sfxlo.dll!VclPtr<vcl::Window>::disposeAndClear
	sfxlo.dll!sfx2::sidebar::SidebarPanelBase::disposing
	cppuhelper3MSC.dll!cppu::WeakComponentImplHelperBase::dispose
	sfxlo.dll!cppu::PartialWeakComponentImplHelper<com::sun::star::ui::XContextChangeEventListener,com::sun::star::ui::XUIElement,com::sun::star::ui::XToolPanel,com::sun::star::ui::XSidebarPanel,com::sun::star::ui::XUpdateModel>::dispose
	sfxlo.dll!sfx2::sidebar::Panel::dispose
	vcllo.dll!VclReferenceBase::disposeOnce
	sfxlo.dll!VclPtr<sfx2::sidebar::Panel>::disposeAndClear
	sfxlo.dll!sfx2::sidebar::Deck::ResetPanels
	sfxlo.dll!sfx2::sidebar::SidebarController::CreatePanels
	sfxlo.dll!sfx2::sidebar::SidebarController::CreateDeck
	sfxlo.dll!sfx2::sidebar::SidebarController::SwitchToDeck
	sfxlo.dll!sfx2::sidebar::SidebarController::SwitchToDeck
	sfxlo.dll!sfx2::sidebar::SidebarController::UpdateConfigurations
	sfxlo.dll!sfx2::sidebar::SidebarController::notifyContextChangeEvent
	fwklo.dll!`anonymous 
namespace'::ContextChangeEventMultiplexer::BroadcastEventToSingleContainer
	fwklo.dll!`anonymous 
namespace'::ContextChangeEventMultiplexer::broadcastContextChangeEvent
	sfxlo.dll!sfx2::sidebar::ContextChangeBroadcaster::BroadcastContextChange
	sfxlo.dll!sfx2::sidebar::ContextChangeBroadcaster::Activate
	sfxlo.dll!SfxShell::BroadcastContextForActivation
	swlo.dll!SwPagePreview::SwPagePreview
	swlo.dll!SwPagePreview::CreateInstance
	sfxlo.dll!SfxViewFactory::CreateInstance
	sfxlo.dll!SfxBaseModel::createViewController
	sfxlo.dll!`anonymous 
namespace'::SfxFrameLoader_Impl::impl_createDocumentView
	sfxlo.dll!`anonymous namespace'::SfxFrameLoader_Impl::load
	fwklo.dll!framework::LoadEnv::impl_loadContent
	fwklo.dll!framework::LoadEnv::startLoading
	fwklo.dll!framework::LoadEnv::loadComponentFromURL
	fwklo.dll!`anonymous namespace'::Frame::loadComponentFromURL
	sfxlo.dll!SfxViewFrame::LoadViewIntoFrame_Impl
	sfxlo.dll!SfxViewFrame::SwitchToViewShell_Impl
	sfxlo.dll!SfxViewFrame::ExecView_Impl
	sfxlo.dll!SfxStubSfxViewFrameExecView_Impl
	sfxlo.dll!SfxShell::CallExec
	sfxlo.dll!SfxDispatcher::Call_Impl
	sfxlo.dll!SfxDispatcher::PostMsgHandler
	sfxlo.dll!std::_Invoker_pmf_pointer::_Call<void (__cdecl 
SfxDispatcher::*)(std::unique_ptr<SfxRequest,std::default_delete<SfxRequest> 
 >),SfxDispatcher * 
&,std::unique_ptr<SfxRequest,std::default_delete<SfxRequest> > >
	sfxlo.dll!std::invoke<void (__cdecl 
SfxDispatcher::*&)(std::unique_ptr<SfxRequest,std::default_delete<SfxRequest> 
 >),SfxDispatcher * 
&,std::unique_ptr<SfxRequest,std::default_delete<SfxRequest> > >
	sfxlo.dll!std::_Invoker_ret<std::_Unforced,0>::_Call<void (__cdecl 
SfxDispatcher::*&)(std::unique_ptr<SfxRequest,std::default_delete<SfxRequest> 
 >),SfxDispatcher * 
&,std::unique_ptr<SfxRequest,std::default_delete<SfxRequest> > >
	sfxlo.dll!std::_Call_binder<std::_Unforced,0,1,void (__cdecl 
SfxDispatcher::*)(std::unique_ptr<SfxRequest,std::default_delete<SfxRequest> 
 >),std::tuple<SfxDispatcher *,std::_Ph<1> 
 >,std::tuple<std::unique_ptr<SfxRequest,std::default_delete<SfxRequest> 
 > &&> >
	sfxlo.dll!std::_Binder<std::_Unforced,void (__cdecl 
SfxDispatcher::*)(std::unique_ptr<SfxRequest,std::default_delete<SfxRequest> 
 >),SfxDispatcher *,std::_Ph<1> const 
&>::operator()<std::unique_ptr<SfxRequest,std::default_delete<SfxRequest> 
 > >
	sfxlo.dll!std::_Invoker_functor::_Call<std::_Binder<std::_Unforced,void 
(__cdecl 
SfxDispatcher::*)(std::unique_ptr<SfxRequest,std::default_delete<SfxRequest> 
 >),SfxDispatcher *,std::_Ph<1> const &> 
&,std::unique_ptr<SfxRequest,std::default_delete<SfxRequest> > >
	sfxlo.dll!std::invoke<std::_Binder<std::_Unforced,void (__cdecl 
SfxDispatcher::*)(std::unique_ptr<SfxRequest,std::default_delete<SfxRequest> 
 >),SfxDispatcher *,std::_Ph<1> const &> 
&,std::unique_ptr<SfxRequest,std::default_delete<SfxRequest> > >
	sfxlo.dll!std::_Invoker_ret<void,1>::_Call<std::_Binder<std::_Unforced,void (__cdecl SfxDispatcher::*)(std::unique_ptr<SfxRequest,std::default_delete<SfxRequest> >),SfxDispatcher *,std::_Ph<1> const &> &,std::unique_ptr<SfxRequest,std::default_delete<SfxRequest> > >
	sfxlo.dll!std::_Func_impl_no_alloc<std::_Binder<std::_Unforced,void 
(__cdecl 
SfxDispatcher::*)(std::unique_ptr<SfxRequest,std::default_delete<SfxRequest> 
 >),SfxDispatcher *,std::_Ph<1> const 
&>,void,std::unique_ptr<SfxRequest,std::default_delete<SfxRequest> > 
 >::_Do_call
	sfxlo.dll!std::_Func_class<void,std::unique_ptr<SfxRequest,std::default_delete<SfxRequest> > >::operator()
	sfxlo.dll!SfxHintPoster::DoEvent_Impl
	sfxlo.dll!SfxHintPoster::LinkStubDoEvent_Impl
	vcllo.dll!Link<void *,void>::Call
	vcllo.dll!ImplHandleUserEvent
	vcllo.dll!ImplWindowFrameProc
	vcllo.dll!SalFrame::CallCallback
	vclplug_winlo.dll!ImplHandleUserEvent
	vclplug_winlo.dll!SalFrameWndProc
	vclplug_winlo.dll!SalFrameWndProcW
	user32.dll!UserCallWinProcCheckWow
	user32.dll!CallWindowProcW
	opengl32.dll!wglWndProc
	user32.dll!UserCallWinProcCheckWow
	user32.dll!DispatchMessageWorker
	vclplug_winlo.dll!ImplSalDispatchMessage
	vclplug_winlo.dll!ImplSalYield
	vclplug_winlo.dll!SalComWndProc
	vclplug_winlo.dll!SalComWndProcW
	user32.dll!UserCallWinProcCheckWow
	user32.dll!DispatchClientMessage
	user32.dll!__fnDWORD
	ntdll.dll!KiUserCallbackDispatcherContinue
	win32u.dll!NtUserPeekMessage
	user32.dll!_PeekMessage
	user32.dll!PeekMessageW
	vclplug_winlo.dll!ImplSalYield
	vclplug_winlo.dll!WinSalInstance::DoYield
	vcllo.dll!ImplYield
	vcllo.dll!Application::Yield
	vcllo.dll!Application::Execute
	sofficeapp.dll!desktop::Desktop::Main
	vcllo.dll!ImplSVMain
	vcllo.dll!SVMain
	sofficeapp.dll!soffice_main
	soffice.bin!sal_main
	soffice.bin!main
	soffice.bin!invoke_main
	soffice.bin!__scrt_common_main_seh
	soffice.bin!__scrt_common_main
	soffice.bin!mainCRTStartup
	kernel32.dll!BaseThreadInitThunk
	ntdll.dll!RtlUserThreadStart
====

So the question is why there's apparently an attempt to use window after 
it was disposed; and how to properly prevent it.

-- 
Best regards,
Mike Kaganski


More information about the LibreOffice mailing list