WaitSynchronizationN: Refactor to fix several bugs

- Separate wait checking from waiting the current thread
- Resume thread when wait_all=true only if all objects are available at once
- Set output to correct wait object index when there are duplicate handles
This commit is contained in:
bunnei 2015-01-18 01:27:46 -05:00
parent aa01c57ae9
commit 6643673f28
8 changed files with 75 additions and 78 deletions

View file

@ -65,18 +65,18 @@ public:
virtual Kernel::HandleType GetHandleType() const = 0;
/**
* Wait the current thread for kernel object to synchronize.
* @param index Index of wait object (only applies to WaitSynchronizationN)
* @return True if the current thread should wait as a result of the wait
* Check if this object is available, (optionally) wait the current thread if not
* @param wait_thread If true, wait the current thread if this object is unavailable
* @return True if the current thread should wait due to this object being unavailable
*/
virtual ResultVal<bool> Wait(unsigned index = 0) {
virtual ResultVal<bool> Wait(bool wait_thread) {
LOG_ERROR(Kernel, "(UNIMPLEMENTED)");
return UnimplementedFunction(ErrorModule::Kernel);
}
/**
* Acquire/lock the kernel object if it is available
* @return True if we were able to acquire the kernel object, otherwise false
* Acquire/lock the this object if it is available
* @return True if we were able to acquire this object, otherwise false
*/
virtual ResultVal<bool> Acquire() {
LOG_ERROR(Kernel, "(UNIMPLEMENTED)");