Browse Source

[RENDER] Don't crash on Paint call when renderer is already disposed

pull/2253/head
Nikita Tsukanov 7 years ago
parent
commit
591ecc4ded
  1. 8
      src/Avalonia.Visuals/Rendering/DeferredRenderer.cs

8
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> _scene;
private DirtyVisuals _dirty;
private IRef<IRenderTargetBitmapImpl> _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;
}

Loading…
Cancel
Save