KReadableEvent.cs 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. namespace Ryujinx.HLE.HOS.Kernel
  2. {
  3. class KReadableEvent : KSynchronizationObject
  4. {
  5. private KEvent Parent;
  6. private bool Signaled;
  7. public KReadableEvent(Horizon System, KEvent Parent) : base(System)
  8. {
  9. this.Parent = Parent;
  10. }
  11. public override void Signal()
  12. {
  13. System.CriticalSectionLock.Lock();
  14. if (!Signaled)
  15. {
  16. Signaled = true;
  17. base.Signal();
  18. }
  19. System.CriticalSectionLock.Unlock();
  20. }
  21. public KernelResult Clear()
  22. {
  23. Signaled = false;
  24. return KernelResult.Success;
  25. }
  26. public KernelResult ClearIfSignaled()
  27. {
  28. KernelResult Result;
  29. System.CriticalSectionLock.Lock();
  30. if (Signaled)
  31. {
  32. Signaled = false;
  33. Result = KernelResult.Success;
  34. }
  35. else
  36. {
  37. Result = KernelResult.InvalidState;
  38. }
  39. System.CriticalSectionLock.Unlock();
  40. return Result;
  41. }
  42. public override bool IsSignaled()
  43. {
  44. return Signaled;
  45. }
  46. }
  47. }