|
|
@@ -145,36 +145,6 @@ static bool DefaultThreadWakeupCallback(ThreadWakeupReason reason, SharedPtr<Thr
|
|
|
return true;
|
|
|
};
|
|
|
|
|
|
-/// Wait for a kernel object to synchronize, timeout after the specified nanoseconds
|
|
|
-static ResultCode WaitSynchronization1(
|
|
|
- SharedPtr<WaitObject> object, Thread* thread, s64 nano_seconds = -1,
|
|
|
- std::function<Thread::WakeupCallback> wakeup_callback = DefaultThreadWakeupCallback) {
|
|
|
-
|
|
|
- if (!object) {
|
|
|
- return ERR_INVALID_HANDLE;
|
|
|
- }
|
|
|
-
|
|
|
- if (object->ShouldWait(thread)) {
|
|
|
- if (nano_seconds == 0) {
|
|
|
- return RESULT_TIMEOUT;
|
|
|
- }
|
|
|
-
|
|
|
- thread->wait_objects = {object};
|
|
|
- object->AddWaitingThread(thread);
|
|
|
- thread->status = THREADSTATUS_WAIT_SYNCH_ANY;
|
|
|
-
|
|
|
- // Create an event to wake the thread up after the specified nanosecond delay has passed
|
|
|
- thread->WakeAfterDelay(nano_seconds);
|
|
|
- thread->wakeup_callback = wakeup_callback;
|
|
|
-
|
|
|
- Core::System::GetInstance().PrepareReschedule();
|
|
|
- } else {
|
|
|
- object->Acquire(thread);
|
|
|
- }
|
|
|
-
|
|
|
- return RESULT_SUCCESS;
|
|
|
-}
|
|
|
-
|
|
|
/// Wait for the given handles to synchronize, timeout after the specified nanoseconds
|
|
|
static ResultCode WaitSynchronization(Handle* index, VAddr handles_address, u64 handle_count,
|
|
|
s64 nano_seconds) {
|