summaryrefslogtreecommitdiffstats
path: root/src/core/hle/kernel/thread.h
diff options
context:
space:
mode:
authorSebastian Valle <subv2112@gmail.com>2017-09-30 16:12:18 +0200
committerGitHub <noreply@github.com>2017-09-30 16:12:18 +0200
commitdb752b52e84227696af989c2ec1965020c03fac7 (patch)
tree04f1e6403bede1890252a0af047e2e149abdde4c /src/core/hle/kernel/thread.h
parentMerge pull request #2962 from huwpascoe/static_cast (diff)
parentKernel/Threads: When putting a thread to wait, specify a function to execute when it is awoken. (diff)
downloadyuzu-db752b52e84227696af989c2ec1965020c03fac7.tar
yuzu-db752b52e84227696af989c2ec1965020c03fac7.tar.gz
yuzu-db752b52e84227696af989c2ec1965020c03fac7.tar.bz2
yuzu-db752b52e84227696af989c2ec1965020c03fac7.tar.lz
yuzu-db752b52e84227696af989c2ec1965020c03fac7.tar.xz
yuzu-db752b52e84227696af989c2ec1965020c03fac7.tar.zst
yuzu-db752b52e84227696af989c2ec1965020c03fac7.zip
Diffstat (limited to 'src/core/hle/kernel/thread.h')
-rw-r--r--src/core/hle/kernel/thread.h15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/core/hle/kernel/thread.h b/src/core/hle/kernel/thread.h
index f02e1d43a..4679c2022 100644
--- a/src/core/hle/kernel/thread.h
+++ b/src/core/hle/kernel/thread.h
@@ -41,6 +41,11 @@ enum ThreadStatus {
THREADSTATUS_DEAD ///< Run to completion, or forcefully terminated
};
+enum class ThreadWakeupReason {
+ Signal, // The thread was woken up by WakeupAllWaitingThreads due to an object signal.
+ Timeout // The thread was woken up due to a wait timeout.
+};
+
namespace Kernel {
class Mutex;
@@ -199,14 +204,18 @@ public:
VAddr wait_address; ///< If waiting on an AddressArbiter, this is the arbitration address
- /// True if the WaitSynchronizationN output parameter should be set on thread wakeup.
- bool wait_set_output;
-
std::string name;
/// Handle used as userdata to reference this object when inserting into the CoreTiming queue.
Handle callback_handle;
+ using WakeupCallback = void(ThreadWakeupReason reason, SharedPtr<Thread> thread,
+ SharedPtr<WaitObject> object);
+ // Callback that will be invoked when the thread is resumed from a waiting state. If the thread
+ // was waiting via WaitSynchronizationN then the object will be the last object that became
+ // available. In case of a timeout, the object will be nullptr.
+ std::function<WakeupCallback> wakeup_callback;
+
private:
Thread();
~Thread() override;