2021-01-11 20:17:06 +01:00
|
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
// Copyright © 2020 Skyline Team and Contributors (https://github.com/skyline-emu/)
|
|
|
|
|
|
|
|
#include "KSyncObject.h"
|
|
|
|
#include "KThread.h"
|
|
|
|
|
|
|
|
namespace skyline::kernel::type {
|
|
|
|
void KSyncObject::Signal() {
|
|
|
|
std::lock_guard lock(syncObjectMutex);
|
|
|
|
signalled = true;
|
2021-03-04 14:30:14 +01:00
|
|
|
for (auto &waiter : syncObjectWaiters) {
|
2021-01-11 20:17:06 +01:00
|
|
|
if (waiter->isCancellable) {
|
|
|
|
waiter->isCancellable = false;
|
|
|
|
waiter->wakeObject = this;
|
|
|
|
state.scheduler->InsertThread(waiter);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2021-03-04 14:30:14 +01:00
|
|
|
|
|
|
|
bool KSyncObject::ResetSignal() {
|
|
|
|
std::lock_guard lock(syncObjectMutex);
|
|
|
|
if (signalled) [[likely]] {
|
|
|
|
signalled = false;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
2021-01-11 20:17:06 +01:00
|
|
|
}
|