From d9d5e8b6acf1554876295b17ed496853693c2d5b Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Thu, 17 Nov 2016 23:21:52 +0100 Subject: [PATCH] Prevent reentrancy in renderer. --- src/Avalonia.Visuals/Rendering/DeferredRenderer.cs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs b/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs index d28b4a50ff..72897021ef 100644 --- a/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs +++ b/src/Avalonia.Visuals/Rendering/DeferredRenderer.cs @@ -20,6 +20,7 @@ namespace Avalonia.Rendering private ConcurrentQueue _renderQueue = new ConcurrentQueue(); private bool _needsUpdate; private bool _updateQueued; + private bool _rendering; private readonly Stopwatch _stopwatch = Stopwatch.StartNew(); private int _totalFrames; @@ -169,12 +170,19 @@ namespace Avalonia.Rendering private void OnRenderLoopTick(object sender, EventArgs e) { + if (_rendering) + { + return; + } + if (_needsUpdate && !_updateQueued) { Dispatcher.UIThread.InvokeAsync(UpdateScene, DispatcherPriority.Render); _updateQueued = true; } + _rendering = true; + if (!_renderQueue.IsEmpty) { if (_renderTarget == null) @@ -210,6 +218,8 @@ namespace Avalonia.Rendering _renderTarget = null; } } + + _rendering = false; } } }