From 591ecc4ded6e5fdaeb1a8d46e6559596f09c3f50 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Fri, 18 Jan 2019 22:27:20 +0300 Subject: [PATCH] [RENDER] Don't crash on Paint call when renderer is already disposed --- src/Avalonia.Visuals/Rendering/DeferredRenderer.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs b/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs index 084b14ea97..60e624948e 100644 --- a/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs +++ b/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs @@ -29,6 +29,7 @@ namespace Avalonia.Rendering private readonly ISceneBuilder _sceneBuilder; private bool _running; + private bool _disposed; private volatile IRef _scene; private DirtyVisuals _dirty; private IRef _overlay; @@ -125,6 +126,9 @@ namespace Avalonia.Rendering { lock (_sceneLock) { + if (_disposed) + return; + _disposed = true; var scene = _scene; _scene = null; scene?.Dispose(); @@ -171,7 +175,7 @@ namespace Avalonia.Rendering var t = (IRenderLoopTask)this; if(t.NeedsUpdate) UpdateScene(); - if(_scene.Item != null) + if(_scene?.Item != null) Render(true); } @@ -481,6 +485,8 @@ namespace Avalonia.Rendering Dispatcher.UIThread.VerifyAccess(); lock (_sceneLock) { + if (_disposed) + return; if (_scene?.Item.Generation > _lastSceneId) return; }