diff --git a/data/uking_functions.csv b/data/uking_functions.csv index ab0502d1..576e566d 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -90530,6 +90530,8 @@ 0x00000071011f7d14,EventPlusString::setMainInvoker,36,_ZN4ksys4util4Task11setDelegateERKNS0_18TaskDelegateSetterE 0x00000071011f7d38,EventPlusString::submitRequest,544,_ZN4ksys4util4Task13submitRequestERNS0_11TaskRequestE? 0x00000071011f7f58,EventPlusString::u,124,_ZNK4ksys4util4Task16canSubmitRequestEv +0x00000071011f7fd4,_ZN4ksys4util4Task11setUserDataEPv,8,_ZN4ksys4util4Task11setUserDataEPv +0x00000071011f7fdc,_ZN4ksys4util4Task20setDelegateInternal_EPN4sead13AnyDelegate1RIPvbEE,0x58,_ZN4ksys4util4Task20setDelegateInternal_EPN4sead13AnyDelegate1RIPvbEE 0x00000071011f8034,EventPlusString::v,360,_ZN4ksys4util4Task30processOnCurrentThreadDirectlyEPNS0_10TaskThreadE 0x00000071011f819c,EventPlusString::p,28,_ZN4ksys4util4Task15removeFromQueueEv 0x00000071011f81b8,sub_71011F81B8,28,_ZN4ksys4util4Task16removeFromQueue2Ev 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();