-
Notifications
You must be signed in to change notification settings - Fork 294
Open
Description
Disposing a shared CanvasDevice (despite documentation warning against it) causes a crash when an app's resize events fire.
Expected behavior
Per docs, I expect subsequent GetSharedDevice() calls to safely recreate and return a new device.
If the Canvas itself is a component using the shared device, then the docs are wrong because there would never be a scenario where "no other components are using it".
Actual behavior
App crashes.
Steps to reproduce / Code
Native stack
(lots of text)
KernelBase.dll!RaiseException() Unknown Microsoft.Graphics.Canvas.dll!_CxxThrowException(void * pExceptionObject, const _s__ThrowInfo * pThrowInfo) Line 82 C++ Microsoft.Graphics.Canvas.dll!ThrowHR(HRESULT hr) Line 87 C++ [Inline Frame] Microsoft.Graphics.Canvas.dll!ClosablePtr::EnsureNotClosed() Line 74 C++ [Inline Frame] Microsoft.Graphics.Canvas.dll!ABI::Microsoft::Graphics::Canvas::ResourceWrapper::GetResource() Line 77 C++ > Microsoft.Graphics.Canvas.dll!ABI::Microsoft::Graphics::Canvas::CanvasDevice::GetD2DDevice() Line 875 C++ Microsoft.Graphics.Canvas.dll!ABI::Microsoft::Graphics::Canvas::UI::Xaml::CanvasImageSource::SetDevice(ABI::Microsoft::Graphics::Canvas::ICanvasDevice * device) Line 237 C++ Microsoft.Graphics.Canvas.dll!ABI::Microsoft::Graphics::Canvas::UI::Xaml::CanvasImageSource::CanvasImageSource(ABI::Microsoft::Graphics::Canvas::ICanvasResourceCreator * resourceCreator, float width, float height, float dpi, ABI::Microsoft::Graphics::Canvas::CanvasAlphaMode alphaMode, ABI::Microsoft::UI::Xaml::Media::Imaging::ISurfaceImageSourceFactory * surfaceImageSourceFactory, std::shared_ptr drawingSessionFactory) Line 199 C++ Microsoft.Graphics.Canvas.dll!Microsoft::WRL::Details::Make &>(ABI::Microsoft::Graphics::Canvas::ICanvasResourceCreator * & , float & , float & , float & , ABI::Microsoft::Graphics::Canvas::CanvasAlphaMode & , ABI::Microsoft::UI::Xaml::Media::Imaging::ISurfaceImageSourceFactory * && , std::shared_ptr & ) Line 2455 C++ [Inline Frame] Microsoft.Graphics.Canvas.dll!ABI::Microsoft::Graphics::Canvas::UI::Xaml::CanvasImageSourceFactory::CreateWithWidthAndHeightAndDpiAndAlphaMode::__l2::::operator()() Line 144 C++ Microsoft.Graphics.Canvas.dll!ExceptionBoundary<>(ABI::Microsoft::Graphics::Canvas::UI::Xaml::CanvasImageSourceFactory::CreateWithWidthAndHeightAndDpiAndAlphaMode::__l2:: && fn) Line 221 C++ Microsoft.Graphics.Canvas.dll!ABI::Microsoft::Graphics::Canvas::UI::Xaml::CanvasImageSourceFactory::CreateWithWidthAndHeightAndDpiAndAlphaMode(ABI::Microsoft::Graphics::Canvas::ICanvasResourceCreator * resourceCreator, float width, float height, float dpi, ABI::Microsoft::Graphics::Canvas::CanvasAlphaMode alphaMode, ABI::Microsoft::Graphics::Canvas::UI::Xaml::ICanvasImageSource * * imageSource) Line 157 C++ Microsoft.Graphics.Canvas.dll!CanvasControlAdapter::CreateCanvasImageSource(ABI::Microsoft::Graphics::Canvas::ICanvasDevice * device, float width, float height, float dpi, ABI::Microsoft::Graphics::Canvas::CanvasAlphaMode alphaMode) Line 100 C++ Microsoft.Graphics.Canvas.dll!ABI::Microsoft::Graphics::Canvas::UI::Xaml::CanvasControl::CreateOrUpdateRenderTarget(ABI::Microsoft::Graphics::Canvas::ICanvasDevice * device, ABI::Microsoft::Graphics::Canvas::CanvasAlphaMode newAlphaMode, float newDpi, ABI::Windows::Foundation::Size newSize, ABI::Microsoft::Graphics::Canvas::UI::Xaml::BaseControl::RenderTarget * renderTarget) Line 256 C++ [Inline Frame] Microsoft.Graphics.Canvas.dll!ABI::Microsoft::Graphics::Canvas::UI::Xaml::BaseControl::UpdateCurrentRenderTarget(ABI::Microsoft::Graphics::Canvas::ICanvasDevice *) Line 735 C++ Microsoft.Graphics.Canvas.dll!ABI::Microsoft::Graphics::Canvas::UI::Xaml::BaseControl::RunWithRenderTarget< &>(const ABI::Windows::UI::Color & clearColor, const ABI::Windows::Foundation::Size & renderTargetSize, float dpi, ABI::Microsoft::Graphics::Canvas::ICanvasDevice * device, ABI::Microsoft::Graphics::Canvas::UI::Xaml::RunWithDeviceFlags flags, ABI::Microsoft::Graphics::Canvas::UI::Xaml::CanvasControl::DrawControl::__l2:: & fn) Line 702 C++ [Inline Frame] Microsoft.Graphics.Canvas.dll!ABI::Microsoft::Graphics::Canvas::UI::Xaml::BaseControl::RunWithRenderTarget::__l2::::operator()(ABI::Microsoft::Graphics::Canvas::ICanvasDevice *) Line 580 C++ [Inline Frame] Microsoft.Graphics.Canvas.dll!std::invoke(ABI::Microsoft::Graphics::Canvas::UI::Xaml::BaseControl::RunWithRenderTarget::__l2:: &) Line 1714 C++ Microsoft.Graphics.Canvas.dll!std::_Func_impl_no_alloc<,void,ABI::Microsoft::Graphics::Canvas::ICanvasDevice *,enum ABI::Microsoft::Graphics::Canvas::UI::Xaml::RunWithDeviceFlags>::_Do_call(ABI::Microsoft::Graphics::Canvas::ICanvasDevice * && <_Args_0>, ABI::Microsoft::Graphics::Canvas::UI::Xaml::RunWithDeviceFlags && <_Args_1>) Line 878 C++ [Inline Frame] Microsoft.Graphics.Canvas.dll!std::_Func_class::operator()(ABI::Microsoft::Graphics::Canvas::ICanvasDevice * <_Args_0>, ABI::Microsoft::Graphics::Canvas::UI::Xaml::RunWithDeviceFlags <_Args_1>) Line 920 C++ Microsoft.Graphics.Canvas.dll!ABI::Microsoft::Graphics::Canvas::UI::Xaml::RecreatableDeviceManager::RunWithDevice(ABI::Microsoft::Graphics::Canvas::UI::Xaml::CanvasControl * sender, ABI::Microsoft::Graphics::Canvas::UI::Xaml::DeviceCreationOptions deviceCreationOptions, std::function runWithDeviceFunction) Line 186 C++ [Inline Frame] Microsoft.Graphics.Canvas.dll!ABI::Microsoft::Graphics::Canvas::UI::Xaml::BaseControl::RunWithRenderTarget(ABI::Microsoft::Graphics::Canvas::UI::Xaml::CanvasControl::DrawControl::__l2:: &&) Line 577 C++ Microsoft.Graphics.Canvas.dll!ABI::Microsoft::Graphics::Canvas::UI::Xaml::CanvasControl::DrawControl() Line 222 C++ Microsoft.Graphics.Canvas.dll!ABI::Microsoft::Graphics::Canvas::UI::Xaml::CanvasControl::OnCompositionRendering::__l2::() Line 196 C++ Microsoft.Graphics.Canvas.dll!ExceptionBoundary(void)>(ABI::Microsoft::Graphics::Canvas::UI::Xaml::CanvasControl::OnCompositionRendering::__l2::void (void) && fn) Line 222 C++ Microsoft.Graphics.Canvas.dll!ABI::Microsoft::Graphics::Canvas::UI::Xaml::CanvasControl::OnCompositionRendering(IInspectable * __formal, IInspectable * __formal) Line 217 C++ [Inline Frame] Microsoft.Graphics.Canvas.dll!Microsoft::WRL::Callback::__l2::::operator()(IInspectable * &&) Line 335 C++ Microsoft.Graphics.Canvas.dll!Microsoft::WRL::Details::DelegateArgTraits>::*)(IInspectable *,ABI::Windows::ApplicationModel::ISuspendingEventArgs *)>::DelegateInvokeHelper,,1,IInspectable *,ABI::Windows::ApplicationModel::ISuspendingEventArgs *>::Invoke(IInspectable * , ABI::Windows::ApplicationModel::ISuspendingEventArgs * ) Line 245 C++ Microsoft.ui.xaml.dll!DirectUI::CEventSourceBase,IInspectable,IInspectable>::Raise(IInspectable * pSource, IInspectable * pArgs) Line 272 C++ Microsoft.ui.xaml.dll!DirectUI::DXamlCore::OnRenderingEvent(IInspectable * pArgs) Line 2432 C++ Microsoft.ui.xaml.dll!DirectUI::DXamlCore::RaiseEvent(CDependencyObject * target, CEventArgs * pCoreArgs, DirectUI::ManagedEvent eventId) Line 2179 C++ [Inline Frame] Microsoft.ui.xaml.dll!AgCoreCallbacks::RaiseEvent(CDependencyObject *) Line 97 C++ [Inline Frame] Microsoft.ui.xaml.dll!FxCallbacks::JoltHelper_RaiseEvent(CDependencyObject *) Line 880 C++ Microsoft.ui.xaml.dll!CCoreServices::CallPerFrameCallback(float time) Line 4289 C++ Microsoft.ui.xaml.dll!CCoreServices::NWDrawTree(HWWalk * pHWWalk, CWindowRenderTarget * pRenderTarget, VisualTree * pVisualTree, bool forceRedraw, bool * pFrameDrawn) Line 6271 C++ Microsoft.ui.xaml.dll!CCoreServices::NWDrawMainTree(CWindowRenderTarget * pIRenderTarget, bool forceRedraw, bool * pFrameDrawn) Line 6009 C++ Microsoft.ui.xaml.dll!CWindowRenderTarget::Draw(CCoreServices * forceRedraw, bool pFrameDrawn, bool *) Line 130 C++ Microsoft.ui.xaml.dll!CXcpBrowserHost::OnTick() Line 339 C++ Microsoft.ui.xaml.dll!CXcpDispatcher::Tick() Line 1146 C++ Microsoft.ui.xaml.dll!CXcpDispatcher::OnReentrancyProtectedWindowMessage(unsigned int msg, unsigned __int64 lParam, __int64) Line 759 C++ [Inline Frame] Microsoft.ui.xaml.dll!CDeferredInvoke::DispatchQueuedMessage(bool *) Line 141 C++ Microsoft.ui.xaml.dll!CXcpDispatcher::MessageTimerCallback() Line 1254 C++ [Inline Frame] Microsoft.ui.xaml.dll!CXcpDispatcher::MessageTimerCallbackStatic(void *) Line 1223 C++ [Inline Frame] Microsoft.ui.xaml.dll!CXcpDispatcher::Init::__l46::::operator()(ABI::Microsoft::UI::Dispatching::IDispatcherQueueTimer *) Line 324 C++ Microsoft.ui.xaml.dll!Microsoft::WRL::Details::DelegateArgTraits,IInspectable *>::*)(ABI::Microsoft::UI::Dispatching::IDispatcherQueueTimer *,IInspectable *)>::DelegateInvokeHelper,ABI::Windows::Foundation::ITypedEventHandler,Microsoft::WRL::FtmBase>,`CXcpDispatcher::Init'::`46':: &,1,ABI::Microsoft::UI::Dispatching::IDispatcherQueueTimer *,IInspectable *>::Invoke(ABI::Microsoft::UI::Dispatching::IDispatcherQueueTimer * , IInspectable * ) Line 354 C++
Metadata
Metadata
Assignees
Labels
No labels