fix audio thread race condition on StaticAudio.GetInstance

pull/50/head
cosmonaut 2023-06-29 15:01:22 -07:00
parent 36ddb03d8f
commit 74ae295036
1 changed files with 25 additions and 6 deletions

View File

@ -272,22 +272,41 @@ namespace MoonWorks.Audio
/// </summary>
public StaticSoundInstance GetInstance(bool autoFree = true)
{
if (AvailableInstances.Count == 0)
StaticSoundInstance instance;
lock (AvailableInstances)
{
AvailableInstances.Push(new StaticSoundInstance(Device, this));
if (AvailableInstances.Count == 0)
{
AvailableInstances.Push(new StaticSoundInstance(Device, this));
}
instance = AvailableInstances.Pop();
}
var instance = AvailableInstances.Pop();
instance.AutoFree = autoFree;
UsedInstances.Add(instance);
lock (UsedInstances)
{
UsedInstances.Add(instance);
}
return instance;
}
internal void FreeInstance(StaticSoundInstance instance)
{
instance.Reset();
UsedInstances.Remove(instance);
AvailableInstances.Push(instance);
lock (UsedInstances)
{
UsedInstances.Remove(instance);
}
lock (AvailableInstances)
{
AvailableInstances.Push(instance);
}
}
protected override unsafe void Destroy()