Skip to content

Commit 3b5f695

Browse files
committed
added suggestions from ros-controls#1236
1 parent bf7418c commit 3b5f695

File tree

2 files changed

+18
-7
lines changed

2 files changed

+18
-7
lines changed

controller_manager/src/controller_manager.cpp

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -947,12 +947,6 @@ controller_interface::ControllerInterfaceBaseSharedPtr ControllerManager::load_c
947947
controller_interface::return_type ControllerManager::unload_controller(
948948
const std::string & controller_name)
949949
{
950-
// first find and clean controller if it is inactive
951-
if (cleanup_controller(controller_name) != controller_interface::return_type::OK)
952-
{
953-
return controller_interface::return_type::ERROR;
954-
}
955-
956950
RCLCPP_INFO(get_logger(), "Unloading controller: '%s'", controller_name.c_str());
957951
std::lock_guard<std::recursive_mutex> guard(rt_controllers_wrapper_.controllers_lock_);
958952
std::vector<ControllerSpec> & to = rt_controllers_wrapper_.get_unused_list(guard);
@@ -986,9 +980,14 @@ controller_interface::return_type ControllerManager::unload_controller(
986980
return controller_interface::return_type::ERROR;
987981
}
988982

983+
// find and clean controller if it is inactive
984+
if (cleanup_controller(controller_name) != controller_interface::return_type::OK)
985+
{
986+
return controller_interface::return_type::ERROR;
987+
}
988+
989989
RCLCPP_DEBUG(get_logger(), "Shutdown controller");
990990
controller_chain_spec_cleanup(controller_chain_spec_, controller_name);
991-
cleanup_controller_exported_interfaces(controller);
992991
if (is_controller_inactive(*controller.c) || is_controller_unconfigured(*controller.c))
993992
{
994993
RCLCPP_DEBUG(

controller_manager/test/test_controller_manager_srvs.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -490,6 +490,9 @@ TEST_F(TestControllerManagerSrvs, unconfigure_controller_srv)
490490
// scenario: call the cleanup service when no controllers are loaded
491491
// expected: it should return ERROR as no controllers will be found to cleanup
492492
auto result = call_service_and_wait(*client, request, srv_executor);
493+
EXPECT_EQ(
494+
lifecycle_msgs::msg::State::PRIMARY_STATE_UNCONFIGURED,
495+
cm_->get_loaded_controllers()[0].c->get_lifecycle_state().id());
493496
ASSERT_FALSE(result->ok) << "Controller not loaded: " << request->name;
494497

495498
// variation - 2:
@@ -503,6 +506,9 @@ TEST_F(TestControllerManagerSrvs, unconfigure_controller_srv)
503506

504507
result = call_service_and_wait(*client, request, srv_executor, true);
505508
ASSERT_TRUE(result->ok);
509+
EXPECT_EQ(
510+
lifecycle_msgs::msg::State::PRIMARY_STATE_UNCONFIGURED,
511+
cm_->get_loaded_controllers()[0].c->get_lifecycle_state().id());
506512
EXPECT_EQ(1u, cm_->get_loaded_controllers().size());
507513

508514
// variation - 3:
@@ -520,6 +526,9 @@ TEST_F(TestControllerManagerSrvs, unconfigure_controller_srv)
520526
cm_->get_loaded_controllers()[0].c->get_lifecycle_state().id());
521527
result = call_service_and_wait(*client, request, srv_executor, true);
522528
ASSERT_FALSE(result->ok) << "Controller can not be cleaned in active state: " << request->name;
529+
EXPECT_EQ(
530+
lifecycle_msgs::msg::State::PRIMARY_STATE_ACTIVE,
531+
cm_->get_loaded_controllers()[0].c->get_lifecycle_state().id());
523532
EXPECT_EQ(1u, cm_->get_loaded_controllers().size());
524533

525534
// variation - 4:
@@ -533,6 +542,9 @@ TEST_F(TestControllerManagerSrvs, unconfigure_controller_srv)
533542
cm_->get_loaded_controllers()[0].c->get_lifecycle_state().id());
534543
result = call_service_and_wait(*client, request, srv_executor, true);
535544
ASSERT_TRUE(result->ok) << "Controller cleaned in inactive state: " << request->name;
545+
EXPECT_EQ(
546+
lifecycle_msgs::msg::State::PRIMARY_STATE_UNCONFIGURED,
547+
cm_->get_loaded_controllers()[0].c->get_lifecycle_state().id());
536548
EXPECT_EQ(1u, cm_->get_loaded_controllers().size());
537549
}
538550

0 commit comments

Comments
 (0)