From a09db713563feb9eb748df5b0147e09f07166cdb Mon Sep 17 00:00:00 2001 From: Herman Kirshin Date: Wed, 21 Sep 2022 01:26:42 +0300 Subject: [PATCH] #8261 - terminating WinUIComposition loop on process exit to avoid crashes --- .../WinRT/Composition/WinUICompositorConnection.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Windows/Avalonia.Win32/WinRT/Composition/WinUICompositorConnection.cs b/src/Windows/Avalonia.Win32/WinRT/Composition/WinUICompositorConnection.cs index 84c3cc5c51..9a6bd9572a 100644 --- a/src/Windows/Avalonia.Win32/WinRT/Composition/WinUICompositorConnection.cs +++ b/src/Windows/Avalonia.Win32/WinRT/Composition/WinUICompositorConnection.cs @@ -120,10 +120,14 @@ namespace Avalonia.Win32.WinRT.Composition private void RunLoop() { + var cts = new CancellationTokenSource(); + AppDomain.CurrentDomain.ProcessExit += (sender, args) => + cts.Cancel(); + using (var act = _compositor5.RequestCommitAsync()) act.SetCompleted(new RunLoopHandler(this)); - while (true) + while (!cts.IsCancellationRequested) { UnmanagedMethods.GetMessage(out var msg, IntPtr.Zero, 0, 0); lock (_pumpLock)