forked from Mirror/Ryujinx
08831eecf7
* IPC refactor part 3 + 4: New server HIPC message processor with source generator based serialization * Make types match on calls to AlignUp/AlignDown * Formatting * Address some PR feedback * Move BitfieldExtensions to Ryujinx.Common.Utilities and consolidate implementations * Rename Reader/Writer to SpanReader/SpanWriter and move to Ryujinx.Common.Memory * Implement EventType * Address more PR feedback * Log request processing errors since they are not normal * Rename waitable to multiwait and add missing lock * PR feedback * Ac_K PR feedback
65 lines
No EOL
1.3 KiB
C#
65 lines
No EOL
1.3 KiB
C#
using Ryujinx.HLE.HOS.Kernel.Common;
|
|
using Ryujinx.Horizon.Common;
|
|
|
|
namespace Ryujinx.HLE.HOS.Kernel.Threading
|
|
{
|
|
class KReadableEvent : KSynchronizationObject
|
|
{
|
|
private readonly KEvent _parent;
|
|
|
|
private bool _signaled;
|
|
|
|
public KReadableEvent(KernelContext context, KEvent parent) : base(context)
|
|
{
|
|
_parent = parent;
|
|
}
|
|
|
|
public override void Signal()
|
|
{
|
|
KernelContext.CriticalSection.Enter();
|
|
|
|
if (!_signaled)
|
|
{
|
|
_signaled = true;
|
|
|
|
base.Signal();
|
|
}
|
|
|
|
KernelContext.CriticalSection.Leave();
|
|
}
|
|
|
|
public Result Clear()
|
|
{
|
|
_signaled = false;
|
|
|
|
return Result.Success;
|
|
}
|
|
|
|
public Result ClearIfSignaled()
|
|
{
|
|
Result result;
|
|
|
|
KernelContext.CriticalSection.Enter();
|
|
|
|
if (_signaled)
|
|
{
|
|
_signaled = false;
|
|
|
|
result = Result.Success;
|
|
}
|
|
else
|
|
{
|
|
result = KernelResult.InvalidState;
|
|
}
|
|
|
|
KernelContext.CriticalSection.Leave();
|
|
|
|
return result;
|
|
}
|
|
|
|
public override bool IsSignaled()
|
|
{
|
|
return _signaled;
|
|
}
|
|
}
|
|
} |