diff --git a/modules/integration_test/integration_test_base.cc b/modules/integration_test/integration_test_base.cc index 6ab617a9f46f962404962f66c956465f93525f70..f6eff5d89e6574c5c163f8192c31b63135f09836 100644 --- a/modules/integration_test/integration_test_base.cc +++ b/modules/integration_test/integration_test_base.cc @@ -147,7 +147,7 @@ void IntegrationTestBase::SetUp() { Clock::SetMode(Clock::CYBERTRON); apollo::cybertron::Init(node_name); CHECK(FeedTestData()) << "Failed to feed test data"; - // planning_.reset(new PlanningComponent()); + planning_.reset(new PlanningComponent()); } void IntegrationTestBase::UpdateData() { diff --git a/modules/integration_test/integration_test_base.h b/modules/integration_test/integration_test_base.h index eafbd44ccd6720d27d0deb406a007d2cf6796efc..ea386b29a92c841a6164a1677af5086fdf5fead4 100644 --- a/modules/integration_test/integration_test_base.h +++ b/modules/integration_test/integration_test_base.h @@ -17,6 +17,7 @@ #include #include #include +#include #include #include "gtest/gtest.h" diff --git a/modules/planning/reference_line/reference_line_provider.cc b/modules/planning/reference_line/reference_line_provider.cc index b377d8e9b887bc536bef9d470b0047996b3b0fd3..006a1f9ba141956008915f3d66d3a0f30c98cf69 100644 --- a/modules/planning/reference_line/reference_line_provider.cc +++ b/modules/planning/reference_line/reference_line_provider.cc @@ -26,8 +26,6 @@ #include #include -#include "cybertron/cybertron.h" - #include "modules/common/configs/vehicle_config_helper.h" #include "modules/common/time/time.h" #include "modules/common/util/file.h" @@ -108,13 +106,20 @@ bool ReferenceLineProvider::Start() { } if (FLAGS_enable_reference_line_provider_thread) { - auto task = apollo::cybertron::CreateTask( - "async_reference_line_provider", [this]() { this->GenerateThread(); }); + task_ = std::make_shared>( + "async_reference_line_provider", + [this](const std::shared_ptr &) { this->GenerateThread(); }); + task_future_ = task_->Execute(std::make_shared()); } return true; } -void ReferenceLineProvider::Stop() { is_stop_ = true; } +void ReferenceLineProvider::Stop() { + is_stop_ = true; + if (FLAGS_enable_reference_line_provider_thread) { + task_future_.get(); + } +} void ReferenceLineProvider::UpdateReferenceLine( const std::list &reference_lines, diff --git a/modules/planning/reference_line/reference_line_provider.h b/modules/planning/reference_line/reference_line_provider.h index 65b9ee55225f689c830faca1003f35ce0b42e5ba..21833b43f5b2cc23b9ed6c970554c0dc53406c0e 100644 --- a/modules/planning/reference_line/reference_line_provider.h +++ b/modules/planning/reference_line/reference_line_provider.h @@ -34,6 +34,8 @@ #include #include +#include "cybertron/cybertron.h" + #include "modules/common/vehicle_state/proto/vehicle_state.pb.h" #include "modules/map/relative_map/proto/navigation.pb.h" #include "modules/planning/proto/planning_config.pb.h" @@ -176,6 +178,9 @@ class ReferenceLineProvider { std::queue> reference_line_history_; std::queue> route_segments_history_; + + std::shared_ptr> task_; + std::future task_future_; }; } // namespace planning diff --git a/modules/planning/std_planning.cc b/modules/planning/std_planning.cc index fc26a4087aa6467f13b341fd8f741a2c53855288..17241dbafef8cd0eac157d21e981d0f2ee99d512 100644 --- a/modules/planning/std_planning.cc +++ b/modules/planning/std_planning.cc @@ -80,7 +80,9 @@ bool IsDifferentRouting(const RoutingResponse& first, } // namespace StdPlanning::~StdPlanning() { - reference_line_provider_->Stop(); + if (reference_line_provider_) { + reference_line_provider_->Stop(); + } last_publishable_trajectory_.reset(nullptr); frame_.reset(nullptr); planner_.reset(nullptr);