summaryrefslogtreecommitdiffstats
path: root/src/core/hle/kernel/thread.h
diff options
context:
space:
mode:
authorSubv <subv2112@gmail.com>2016-12-04 15:58:36 +0100
committerSubv <subv2112@gmail.com>2016-12-04 15:58:36 +0100
commitbdad00c73f46106ba78995bdde1b50349e940b09 (patch)
tree1c39ab11c8e995f2cbba8a5f602ab64819085b22 /src/core/hle/kernel/thread.h
parentThreading: Reworked the way our scheduler works. (diff)
downloadyuzu-bdad00c73f46106ba78995bdde1b50349e940b09.tar
yuzu-bdad00c73f46106ba78995bdde1b50349e940b09.tar.gz
yuzu-bdad00c73f46106ba78995bdde1b50349e940b09.tar.bz2
yuzu-bdad00c73f46106ba78995bdde1b50349e940b09.tar.lz
yuzu-bdad00c73f46106ba78995bdde1b50349e940b09.tar.xz
yuzu-bdad00c73f46106ba78995bdde1b50349e940b09.tar.zst
yuzu-bdad00c73f46106ba78995bdde1b50349e940b09.zip
Diffstat (limited to '')
-rw-r--r--src/core/hle/kernel/thread.h19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/core/hle/kernel/thread.h b/src/core/hle/kernel/thread.h
index 63b97b74f..1b29fb3a3 100644
--- a/src/core/hle/kernel/thread.h
+++ b/src/core/hle/kernel/thread.h
@@ -131,8 +131,8 @@ public:
* It is used to set the output value of WaitSynchronizationN when the thread is awakened.
* @param object Object to query the index of.
*/
- s32 GetWaitObjectIndex(WaitObject* object) {
- return wait_objects_index[object->GetObjectId()];
+ s32 GetWaitObjectIndex(const WaitObject* object) const {
+ return wait_objects_index.at(object->GetObjectId());
}
/**
@@ -148,6 +148,15 @@ public:
return tls_address;
}
+ /**
+ * Returns whether this thread is waiting for all the objects in
+ * its wait list to become ready, as a result of a WaitSynchronizationN call
+ * with wait_all = true, or a ReplyAndReceive call.
+ */
+ bool IsWaitingAll() const {
+ return !wait_objects.empty();
+ }
+
Core::ThreadContext context;
u32 thread_id;
@@ -169,7 +178,11 @@ public:
boost::container::flat_set<SharedPtr<Mutex>> held_mutexes;
SharedPtr<Process> owner_process; ///< Process that owns this thread
- std::vector<SharedPtr<WaitObject>> wait_objects; ///< Objects that the thread is waiting on
+
+ /// Objects that the thread is waiting on.
+ /// This is only populated when the thread should wait for all the objects to become ready.
+ std::vector<SharedPtr<WaitObject>> wait_objects;
+
std::unordered_map<int, s32> wait_objects_index; ///< Mapping of Object ids to their position in the last waitlist that this object waited on.
VAddr wait_address; ///< If waiting on an AddressArbiter, this is the arbitration address