|
|
|
@ -65,21 +65,6 @@ Thread* GetCurrentThread() {
|
|
|
|
|
return current_thread.get();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Check if a thread is waiting on the specified wait object
|
|
|
|
|
* @param thread The thread to test
|
|
|
|
|
* @param wait_object The object to test against
|
|
|
|
|
* @return True if the thread is waiting, false otherwise
|
|
|
|
|
*/
|
|
|
|
|
static bool CheckWait_WaitObject(const Thread* thread, WaitObject* wait_object) {
|
|
|
|
|
if (thread->status != THREADSTATUS_WAIT_SYNCH_ALL &&
|
|
|
|
|
thread->status != THREADSTATUS_WAIT_SYNCH_ANY)
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
auto itr = std::find(thread->wait_objects.begin(), thread->wait_objects.end(), wait_object);
|
|
|
|
|
return itr != thread->wait_objects.end();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Check if the specified thread is waiting on the specified address to be arbitrated
|
|
|
|
|
* @param thread The thread to test
|
|
|
|
@ -249,14 +234,6 @@ void WaitCurrentThread_Sleep() {
|
|
|
|
|
thread->status = THREADSTATUS_WAIT_SLEEP;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void WaitCurrentThread_WaitSynchronization(std::vector<SharedPtr<WaitObject>> wait_objects,
|
|
|
|
|
bool wait_set_output) {
|
|
|
|
|
Thread* thread = GetCurrentThread();
|
|
|
|
|
thread->wait_set_output = wait_set_output;
|
|
|
|
|
thread->wait_objects = std::move(wait_objects);
|
|
|
|
|
thread->status = THREADSTATUS_WAIT_SYNCH_ANY;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void WaitCurrentThread_ArbitrateAddress(VAddr wait_address) {
|
|
|
|
|
Thread* thread = GetCurrentThread();
|
|
|
|
|
thread->wait_address = wait_address;
|
|
|
|
|