Ryujinx/Ryujinx.HLE/HOS/Kernel/Threading/KReadableEvent.cs
gdkchan 08831eecf7
IPC refactor part 3+4: New server HIPC message processor (#4188)
* 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
2023-01-04 23:15:45 +01:00

65 lines
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;
}
}
}