minor cleanup

This commit is contained in:
nattthebear 2020-06-08 07:55:38 -04:00
parent 87803ffcba
commit 6eb4ec4c0d
1 changed files with 5 additions and 9 deletions

View File

@ -172,7 +172,7 @@ namespace BizHawk.Emulation.Cores.Waterbox
// todo: bleh // todo: bleh
private GCHandle _frameAdvanceInputLock; private GCHandle _frameAdvanceInputLock;
private volatile bool _frameThreadProcActive; private Task _frameThreadProcActive;
protected override LibWaterboxCore.FrameInfo FrameAdvancePrep(IController controller, bool render, bool rendersound) protected override LibWaterboxCore.FrameInfo FrameAdvancePrep(IController controller, bool render, bool rendersound)
{ {
@ -193,18 +193,13 @@ namespace BizHawk.Emulation.Cores.Waterbox
}; };
if (_frameThreadStart != null) if (_frameThreadStart != null)
{ {
_frameThreadProcActive = true; _frameThreadProcActive = Task.Run(_frameThreadStart);
Task.Run(() =>
{
_frameThreadStart();
_frameThreadProcActive = false;
});
} }
return ret; return ret;
} }
protected override void FrameAdvancePost() protected override void FrameAdvancePost()
{ {
while (_frameThreadProcActive) if (_frameThreadProcActive != null)
{ {
// The nyma core unmanaged code should always release the threadproc to completion // The nyma core unmanaged code should always release the threadproc to completion
// before returning from Emulate, but even when it does occasionally the threadproc // before returning from Emulate, but even when it does occasionally the threadproc
@ -212,8 +207,9 @@ namespace BizHawk.Emulation.Cores.Waterbox
// It MUST be allowed to finish now, because the theadproc doesn't know about or participate // It MUST be allowed to finish now, because the theadproc doesn't know about or participate
// in the waterbox core lockout (IMonitor) directly -- it assumes the parent has handled that // in the waterbox core lockout (IMonitor) directly -- it assumes the parent has handled that
_frameThreadProcActive.Wait();
_frameThreadProcActive = null;
} }
_frameAdvanceInputLock.Free();
} }
public DisplayType Region { get; protected set; } public DisplayType Region { get; protected set; }