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
_______________________________________________
LibreOffice mailing list
LibreOffice@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice

Reply via email to