|
|
@ -65,21 +65,6 @@ Thread* GetCurrentThread() { |
|
|
return current_thread.get(); |
|
|
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 |
|
|
* Check if the specified thread is waiting on the specified address to be arbitrated |
|
|
* @param thread The thread to test |
|
|
* @param thread The thread to test |
|
|
@ -249,14 +234,6 @@ void WaitCurrentThread_Sleep() { |
|
|
thread->status = THREADSTATUS_WAIT_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) { |
|
|
void WaitCurrentThread_ArbitrateAddress(VAddr wait_address) { |
|
|
Thread* thread = GetCurrentThread(); |
|
|
Thread* thread = GetCurrentThread(); |
|
|
thread->wait_address = wait_address; |
|
|
thread->wait_address = wait_address; |
|
|
|