diff options
Diffstat (limited to 'Ryujinx.Audio/Renderer/Server')
| -rw-r--r-- | Ryujinx.Audio/Renderer/Server/AudioRenderSystem.cs | 12 | ||||
| -rw-r--r-- | Ryujinx.Audio/Renderer/Server/AudioRendererManager.cs | 14 |
2 files changed, 26 insertions, 0 deletions
diff --git a/Ryujinx.Audio/Renderer/Server/AudioRenderSystem.cs b/Ryujinx.Audio/Renderer/Server/AudioRenderSystem.cs index 787b8f9f..112b0e44 100644 --- a/Ryujinx.Audio/Renderer/Server/AudioRenderSystem.cs +++ b/Ryujinx.Audio/Renderer/Server/AudioRenderSystem.cs @@ -142,6 +142,11 @@ namespace Ryujinx.Audio.Renderer.Server _sessionId = sessionId; MemoryManager = memoryManager; + if (memoryManager is IRefCounted rc) + { + rc.IncrementReferenceCount(); + } + WorkBufferAllocator workBufferAllocator; _workBufferRegion = MemoryManager.GetWritableRegion(workBuffer, (int)workBufferSize); @@ -832,6 +837,13 @@ namespace Ryujinx.Audio.Renderer.Server _terminationEvent.Dispose(); _workBufferMemoryPin.Dispose(); _workBufferRegion.Dispose(); + + if (MemoryManager is IRefCounted rc) + { + rc.DecrementReferenceCount(); + + MemoryManager = null; + } } } } diff --git a/Ryujinx.Audio/Renderer/Server/AudioRendererManager.cs b/Ryujinx.Audio/Renderer/Server/AudioRendererManager.cs index ec847948..004ac656 100644 --- a/Ryujinx.Audio/Renderer/Server/AudioRendererManager.cs +++ b/Ryujinx.Audio/Renderer/Server/AudioRendererManager.cs @@ -22,6 +22,7 @@ using Ryujinx.Common.Logging; using Ryujinx.Memory; using System; using System.Diagnostics; +using System.Linq; using System.Threading; namespace Ryujinx.Audio.Renderer.Server @@ -319,6 +320,19 @@ namespace Ryujinx.Audio.Renderer.Server { if (disposing) { + // Clone the sessions array to dispose them outside the lock. + AudioRenderSystem[] sessions; + + lock (_sessionLock) + { + sessions = _sessions.ToArray(); + } + + foreach (AudioRenderSystem renderer in sessions) + { + renderer?.Dispose(); + } + lock (_audioProcessorLock) { if (_isRunning) |
