aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Audio/Renderer/Server
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.Audio/Renderer/Server')
-rw-r--r--Ryujinx.Audio/Renderer/Server/AudioRenderSystem.cs7
-rw-r--r--Ryujinx.Audio/Renderer/Server/AudioRendererManager.cs10
2 files changed, 15 insertions, 2 deletions
diff --git a/Ryujinx.Audio/Renderer/Server/AudioRenderSystem.cs b/Ryujinx.Audio/Renderer/Server/AudioRenderSystem.cs
index 943a2d78..6aed3c5d 100644
--- a/Ryujinx.Audio/Renderer/Server/AudioRenderSystem.cs
+++ b/Ryujinx.Audio/Renderer/Server/AudioRenderSystem.cs
@@ -94,6 +94,8 @@ namespace Ryujinx.Audio.Renderer.Server
private AudioRendererManager _manager;
+ private int _disposeState;
+
public AudioRenderSystem(AudioRendererManager manager, IWritableEvent systemEvent)
{
_manager = manager;
@@ -811,7 +813,10 @@ namespace Ryujinx.Audio.Renderer.Server
public void Dispose()
{
- Dispose(true);
+ if (Interlocked.CompareExchange(ref _disposeState, 1, 0) == 0)
+ {
+ Dispose(true);
+ }
}
protected virtual void Dispose(bool disposing)
diff --git a/Ryujinx.Audio/Renderer/Server/AudioRendererManager.cs b/Ryujinx.Audio/Renderer/Server/AudioRendererManager.cs
index 004ac656..71d0f318 100644
--- a/Ryujinx.Audio/Renderer/Server/AudioRendererManager.cs
+++ b/Ryujinx.Audio/Renderer/Server/AudioRendererManager.cs
@@ -83,6 +83,11 @@ namespace Ryujinx.Audio.Renderer.Server
public AudioProcessor Processor { get; }
/// <summary>
+ /// The dispose state.
+ /// </summary>
+ private int _disposeState;
+
+ /// <summary>
/// Create a new <see cref="AudioRendererManager"/>.
/// </summary>
public AudioRendererManager()
@@ -313,7 +318,10 @@ namespace Ryujinx.Audio.Renderer.Server
public void Dispose()
{
- Dispose(true);
+ if (Interlocked.CompareExchange(ref _disposeState, 1, 0) == 0)
+ {
+ Dispose(true);
+ }
}
protected virtual void Dispose(bool disposing)