From e9dcb4c51a49b13aa6827a95435e2a98bdbe1c17 Mon Sep 17 00:00:00 2001 From: azural Date: Mon, 24 Sep 2018 10:58:37 -0700 Subject: [PATCH] framework: Fix crash during shutdown --- framework/cybertron/scheduler/scheduler.cpp | 8 +++++++- framework/cybertron/scheduler/scheduler.h | 1 + framework/cybertron/task/task_manager.h | 4 ++-- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/framework/cybertron/scheduler/scheduler.cpp b/framework/cybertron/scheduler/scheduler.cpp index 6fd55448fe..f1d016c826 100644 --- a/framework/cybertron/scheduler/scheduler.cpp +++ b/framework/cybertron/scheduler/scheduler.cpp @@ -130,7 +130,13 @@ bool Scheduler::CreateTask(std::function&& func, return true; } -// TODO(xinjiankang) +bool Scheduler::NotifyTask(uint64_t task_id) const { + if (stop_) { + return true; + } + return proc_balancer_->NotifyProcessor(task_id); +} + bool Scheduler::RemoveTask(const std::string& name) { if (stop_) { return true; diff --git a/framework/cybertron/scheduler/scheduler.h b/framework/cybertron/scheduler/scheduler.h index da9e033a44..776865f5d8 100644 --- a/framework/cybertron/scheduler/scheduler.h +++ b/framework/cybertron/scheduler/scheduler.h @@ -57,6 +57,7 @@ class Scheduler { bool CreateTask(std::function&& func, const std::string& name, std::shared_ptr visitor = nullptr); bool RemoveTask(const std::string& name); + bool NotifyTask(uint64_t task_id) const; void PrintStatistics(); void ShutDown(); static uint32_t ProcessorNum() { return processor_num_; } diff --git a/framework/cybertron/task/task_manager.h b/framework/cybertron/task/task_manager.h index e1b35f8c79..a8b7aa19d9 100644 --- a/framework/cybertron/task/task_manager.h +++ b/framework/cybertron/task/task_manager.h @@ -21,7 +21,7 @@ #include #include "cybertron/base/bounded_queue.h" -#include "cybertron/scheduler/proc_balancer.h" +#include "cybertron/scheduler/scheduler.h" namespace apollo { namespace cybertron { @@ -38,7 +38,7 @@ class TaskManager { std::bind(std::forward(func), std::forward(args)...)); task_queue_->Enqueue([task]() { (*task)(); }); for (auto& task : tasks_) { - scheduler::ProcBalancer::Instance()->NotifyProcessor(task); + scheduler::Scheduler::Instance()->NotifyTask(task); } std::future res(task->get_future()); return res; -- GitLab