2018-11-04 18:51:27 +01:00
|
|
|
#include <mesosphere/core/KSynchronizationObject.hpp>
|
|
|
|
#include <mesosphere/core/Result.hpp>
|
|
|
|
#include <mesosphere/core/KCoreContext.hpp>
|
|
|
|
#include <mesosphere/threading/KScheduler.hpp>
|
|
|
|
#include <mesosphere/threading/KThread.hpp>
|
|
|
|
|
|
|
|
#include <mutex>
|
|
|
|
|
|
|
|
namespace mesosphere
|
|
|
|
{
|
|
|
|
|
|
|
|
KSynchronizationObject::~KSynchronizationObject()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2018-11-05 12:47:15 +01:00
|
|
|
void KSynchronizationObject::NotifyWaiters()
|
2018-11-04 18:51:27 +01:00
|
|
|
{
|
2018-11-05 13:57:50 +01:00
|
|
|
KScopedCriticalSection criticalSection;
|
2018-11-04 18:51:27 +01:00
|
|
|
|
|
|
|
if (IsSignaled()) {
|
|
|
|
for (auto &&waiter : waiters) {
|
|
|
|
waiter->HandleSyncObjectSignaled(this);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
KLinkedList<KThread *>::const_iterator KSynchronizationObject::AddWaiter(KThread &thread)
|
|
|
|
{
|
|
|
|
return waiters.insert(waiters.end(), &thread);
|
|
|
|
}
|
|
|
|
|
|
|
|
void KSynchronizationObject::RemoveWaiter(KLinkedList<KThread *>::const_iterator it)
|
|
|
|
{
|
|
|
|
waiters.erase(it);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|