From cf9be70ffebe0feaa86e79cb9770e94b416122dd Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Wed, 28 Aug 2019 11:23:59 +0100 Subject: [PATCH] fix keeping disposed items in scene. This can cause application to freeze. --- src/Avalonia.Visuals/Rendering/DeferredRenderer.cs | 9 ++++++--- src/Avalonia.Visuals/Rendering/SceneGraph/Scene.cs | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs b/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs index bf1799bbdc..353445f5a6 100644 --- a/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs +++ b/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs @@ -354,9 +354,12 @@ namespace Avalonia.Rendering foreach (var operation in node.DrawOperations) { - _currentDraw = operation; - operation.Item.Render(context); - _currentDraw = null; + if (operation.Item != null) + { + _currentDraw = operation; + operation.Item.Render(context); + _currentDraw = null; + } } foreach (var child in node.Children) diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/Scene.cs b/src/Avalonia.Visuals/Rendering/SceneGraph/Scene.cs index 1afc096c98..c31b99e2e4 100644 --- a/src/Avalonia.Visuals/Rendering/SceneGraph/Scene.cs +++ b/src/Avalonia.Visuals/Rendering/SceneGraph/Scene.cs @@ -150,7 +150,7 @@ namespace Avalonia.Rendering.SceneGraph index.Add(result.Visual, result); - foreach (var child in source.Children) + foreach (var child in source.Children.Where(x=>!x.Disposed)) { result.AddChild(Clone((VisualNode)child, result, index)); }