From 00ce9eea620652b97b4d3e8cd9218c6fccff8b1c Mon Sep 17 00:00:00 2001
From: Mary <me@thog.eu>
Date: Tue, 29 Jun 2021 19:37:13 +0200
Subject: Fix disposing of IPC sessions server at emulation stop (#2334)

---
 Ryujinx.Audio/Output/AudioOutputSystem.cs | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

(limited to 'Ryujinx.Audio/Output/AudioOutputSystem.cs')

diff --git a/Ryujinx.Audio/Output/AudioOutputSystem.cs b/Ryujinx.Audio/Output/AudioOutputSystem.cs
index f5db9d7a..d32d417a 100644
--- a/Ryujinx.Audio/Output/AudioOutputSystem.cs
+++ b/Ryujinx.Audio/Output/AudioOutputSystem.cs
@@ -18,6 +18,7 @@
 using Ryujinx.Audio.Common;
 using Ryujinx.Audio.Integration;
 using System;
+using System.Threading;
 
 namespace Ryujinx.Audio.Output
 {
@@ -66,6 +67,11 @@ namespace Ryujinx.Audio.Output
         /// </summary>
         private object _parentLock;
 
+        /// <summary>
+        /// The dispose state.
+        /// </summary>
+        private int _disposeState;
+
         /// <summary>
         /// Create a new <see cref="AudioOutputSystem"/>.
         /// </summary>
@@ -357,7 +363,10 @@ namespace Ryujinx.Audio.Output
 
         public void Dispose()
         {
-            Dispose(true);
+            if (Interlocked.CompareExchange(ref _disposeState, 1, 0) == 0)
+            {
+                Dispose(true);
+            }
         }
 
         protected virtual void Dispose(bool disposing)
-- 
cgit v1.2.3-70-g09d2