aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/HOS/Kernel/KSynchronizationObject.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.HLE/HOS/Kernel/KSynchronizationObject.cs')
-rw-r--r--Ryujinx.HLE/HOS/Kernel/KSynchronizationObject.cs36
1 files changed, 23 insertions, 13 deletions
diff --git a/Ryujinx.HLE/HOS/Kernel/KSynchronizationObject.cs b/Ryujinx.HLE/HOS/Kernel/KSynchronizationObject.cs
index b83b0004..28eac330 100644
--- a/Ryujinx.HLE/HOS/Kernel/KSynchronizationObject.cs
+++ b/Ryujinx.HLE/HOS/Kernel/KSynchronizationObject.cs
@@ -1,28 +1,38 @@
-using System;
-using System.Threading;
+using System.Collections.Generic;
namespace Ryujinx.HLE.HOS.Kernel
{
- class KSynchronizationObject : IDisposable
+ class KSynchronizationObject
{
- public ManualResetEvent WaitEvent { get; private set; }
+ public LinkedList<KThread> WaitingThreads;
- public KSynchronizationObject()
+ protected Horizon System;
+
+ public KSynchronizationObject(Horizon System)
+ {
+ this.System = System;
+
+ WaitingThreads = new LinkedList<KThread>();
+ }
+
+ public LinkedListNode<KThread> AddWaitingThread(KThread Thread)
+ {
+ return WaitingThreads.AddLast(Thread);
+ }
+
+ public void RemoveWaitingThread(LinkedListNode<KThread> Node)
{
- WaitEvent = new ManualResetEvent(false);
+ WaitingThreads.Remove(Node);
}
- public void Dispose()
+ public virtual void Signal()
{
- Dispose(true);
+ System.Synchronization.SignalObject(this);
}
- protected virtual void Dispose(bool Disposing)
+ public virtual bool IsSignaled()
{
- if (Disposing)
- {
- WaitEvent.Dispose();
- }
+ return false;
}
}
} \ No newline at end of file