summaryrefslogtreecommitdiff
path: root/src/KingSystem/Utils/Thread
diff options
context:
space:
mode:
authorLéo Lam <leo@leolam.fr>2020-09-26 16:55:44 +0200
committerLéo Lam <leo@leolam.fr>2020-09-26 17:04:43 +0200
commitb2ce4e32ea929d3c526bd432febc23c84b9814a4 (patch)
tree309618c90ad01a2524eee9e0959b0f7e1ce77ac3 /src/KingSystem/Utils/Thread
parentcdf27ca63c7a3450e4de44764cce40cecb7c062a (diff)
ksys/util: Add Task functions that were missed because of IDA's bad tail detection
Diffstat (limited to 'src/KingSystem/Utils/Thread')
-rw-r--r--src/KingSystem/Utils/Thread/Task.cpp18
-rw-r--r--src/KingSystem/Utils/Thread/Task.h2
2 files changed, 15 insertions, 5 deletions
diff --git a/src/KingSystem/Utils/Thread/Task.cpp b/src/KingSystem/Utils/Thread/Task.cpp
index 7ab00b55..7a3c3cff 100644
--- a/src/KingSystem/Utils/Thread/Task.cpp
+++ b/src/KingSystem/Utils/Thread/Task.cpp
@@ -84,11 +84,8 @@ bool Task::submitRequest(TaskRequest& request) {
request.mQueue = mQueue;
}
mUserData = request.mUserData;
- if (auto* delegate = request.mDelegate) {
- deleteDelegate_();
- mFlags.set(Flag::DoNotDeleteDelegate);
- mDelegate = delegate;
- }
+ if (request.mDelegate)
+ setDelegateInternal_(request.mDelegate);
mRemoveCallback = request.mRemoveCallback;
mPostRunCallback = request.mPostRunCallback;
mName = request.mName;
@@ -126,6 +123,17 @@ bool Task::canSubmitRequest() const {
return run_finished_on_current_thread || cond2;
}
+void Task::setUserData(void* user_data) {
+ mUserData = user_data;
+}
+
+bool Task::setDelegateInternal_(TaskDelegate* delegate) {
+ deleteDelegate_();
+ mFlags.set(Flag::DoNotDeleteDelegate);
+ mDelegate = delegate;
+ return delegate != nullptr;
+}
+
void Task::processOnCurrentThreadDirectly(TaskThread* thread) {
{
TaskQueueLock lock{thread};
diff --git a/src/KingSystem/Utils/Thread/Task.h b/src/KingSystem/Utils/Thread/Task.h
index 3f076d0b..4a5aba2b 100644
--- a/src/KingSystem/Utils/Thread/Task.h
+++ b/src/KingSystem/Utils/Thread/Task.h
@@ -150,7 +150,9 @@ protected:
virtual void preRemove_() {}
virtual void postRemove_() {}
+ bool setDelegateInternal_(TaskDelegate* delegate);
void setLaneId(u8 id);
+ void setUserData(void* user_data);
void setThread(TaskThread* thread);
void setStatusPushed();
void setStatusFetched();