aboutsummaryrefslogtreecommitdiffstats
path: root/src/core/thread/Task.cpp
diff options
context:
space:
mode:
authorSaturneric <[email protected]>2022-05-20 18:10:06 +0000
committerSaturneric <[email protected]>2022-05-20 18:10:06 +0000
commit7d5a4bed7fc1c78f9be897daf4f2f50fad51f828 (patch)
treecd683b43005de0cc0fdb03733a946a72e74b6447 /src/core/thread/Task.cpp
parentfix: improve about dialog about version checking (diff)
downloadGpgFrontend-7d5a4bed7fc1c78f9be897daf4f2f50fad51f828.tar.gz
GpgFrontend-7d5a4bed7fc1c78f9be897daf4f2f50fad51f828.zip
feat: track pending tasks in task runner system
Diffstat (limited to 'src/core/thread/Task.cpp')
-rw-r--r--src/core/thread/Task.cpp28
1 files changed, 18 insertions, 10 deletions
diff --git a/src/core/thread/Task.cpp b/src/core/thread/Task.cpp
index 1f24b42e..6b1a27a1 100644
--- a/src/core/thread/Task.cpp
+++ b/src/core/thread/Task.cpp
@@ -64,7 +64,9 @@ GpgFrontend::Thread::Task::Task(TaskRunnable runnable, TaskCallback callback,
<< "callback_thread_: " << callback_thread_;
}
-GpgFrontend::Thread::Task::~Task() = default;
+GpgFrontend::Thread::Task::~Task() {
+ LOG(TRACE) << "Task" << uuid_ << "destroyed";
+}
std::string GpgFrontend::Thread::Task::GetUUID() const { return uuid_; }
@@ -76,21 +78,27 @@ void GpgFrontend::Thread::Task::SetRTN(int rtn) { this->rtn_ = rtn; }
void GpgFrontend::Thread::Task::init() {
connect(this, &Task::SignalTaskFinished, this, &Task::before_finish_task);
- connect(this, &Task::SignalTaskFinished, this, &Task::deleteLater);
}
void GpgFrontend::Thread::Task::before_finish_task() {
LOG(TRACE) << "Task" << uuid_ << "finished";
- if (callback_) {
- bool if_invoke = QMetaObject::invokeMethod(
- callback_thread_,
- [callback = callback_, rtn = rtn_, data_object = data_object_]() {
- callback(rtn, data_object);
- });
- if (!if_invoke) {
- LOG(ERROR) << "failed to invoke callback";
+ try {
+ if (callback_) {
+ bool if_invoke = QMetaObject::invokeMethod(
+ callback_thread_,
+ [callback = callback_, rtn = rtn_, data_object = data_object_]() {
+ callback(rtn, data_object);
+ });
+ if (!if_invoke) {
+ LOG(ERROR) << "failed to invoke callback";
+ }
}
+ } catch (std::exception &e) {
+ LOG(ERROR) << "exception caught: " << e.what();
+ } catch (...) {
+ LOG(ERROR) << "unknown exception caught";
}
+ emit SignalTaskPostFinishedDone();
}
void GpgFrontend::Thread::Task::run() {