env_manager: clear variables on cleanup, remove mutex
This commit is contained in:
parent
6d81f59204
commit
d7d3950052
2 changed files with 16 additions and 11 deletions
|
@ -54,46 +54,42 @@ void EnvManager::startEnv_cb(
|
|||
const env_manager_interfaces::srv::StartEnv::Request::SharedPtr request,
|
||||
env_manager_interfaces::srv::StartEnv::Response::SharedPtr response) {
|
||||
|
||||
std::lock_guard<std::mutex> lock(m_env_mutex);
|
||||
|
||||
auto it = std::find_if(
|
||||
m_active_envs.begin(), m_active_envs.end(),
|
||||
[&request](const EnvSpec &env) { return env.name == request->name; });
|
||||
|
||||
if (it != m_active_envs.end()) {
|
||||
RCLCPP_INFO(get_logger(), "Unloading existing environment '%s'", request->name.c_str());
|
||||
RCLCPP_INFO(get_logger(), "Unloading existing environment '%s'",
|
||||
request->name.c_str());
|
||||
unloadEnv(request->name);
|
||||
}
|
||||
|
||||
auto loadedEnv = loadEnv(request->name, request->type);
|
||||
auto configuredEnv = configureEnv(request->name);
|
||||
response->ok = (loadedEnv.get() != nullptr &&
|
||||
configureEnv(request->name) == EnvStateReturnType::SUCCESS)
|
||||
configuredEnv == EnvStateReturnType::SUCCESS)
|
||||
? true
|
||||
: false;
|
||||
}
|
||||
void EnvManager::loadEnv_cb(
|
||||
const env_manager_interfaces::srv::LoadEnv::Request::SharedPtr request,
|
||||
env_manager_interfaces::srv::LoadEnv::Response::SharedPtr response) {
|
||||
std::lock_guard<std::mutex> lock(m_env_mutex);
|
||||
response->ok = loadEnv(request->name, request->type).get() != nullptr;
|
||||
}
|
||||
|
||||
void EnvManager::configureEnv_cb(
|
||||
const env_manager_interfaces::srv::ConfigureEnv::Request::SharedPtr request,
|
||||
env_manager_interfaces::srv::ConfigureEnv::Response::SharedPtr response) {
|
||||
std::lock_guard<std::mutex> guard(m_env_mutex);
|
||||
response->ok = configureEnv(request->name) == EnvStateReturnType::SUCCESS;
|
||||
}
|
||||
|
||||
void EnvManager::unloadEnv_cb(
|
||||
const env_manager_interfaces::srv::UnloadEnv::Request::SharedPtr request,
|
||||
env_manager_interfaces::srv::UnloadEnv::Response::SharedPtr response) {
|
||||
std::lock_guard<std::mutex> lock(m_env_mutex);
|
||||
response->ok = unloadEnv(request->name) == EnvStateReturnType::SUCCESS;
|
||||
}
|
||||
|
||||
EnvInterfaceSharedPtr EnvManager::addEnv(const EnvSpec &enviroment) {
|
||||
std::lock_guard<std::mutex> lock(m_env_mutex);
|
||||
// generate list of active enviroments
|
||||
// std::string unique_env_name = enviroment.name;// + "_" +
|
||||
// std::to_string(m_active_envs.size()); m_active_envs[unique_env_name] =
|
||||
|
@ -174,7 +170,7 @@ EnvStateReturnType EnvManager::unloadEnv(const std::string &env_name) {
|
|||
// }
|
||||
|
||||
EnvStateReturnType EnvManager::configureEnv(const std::string &env_name) {
|
||||
std::lock_guard<std::mutex> guard(m_env_mutex);
|
||||
RCLCPP_INFO(this->get_logger(), "Configuring enviroment '%s'", env_name.c_str());
|
||||
|
||||
auto it = std::find_if(
|
||||
m_active_envs.begin(), m_active_envs.end(),
|
||||
|
|
|
@ -67,10 +67,19 @@ CallbackReturn GzEnviroment::on_activate(const rclcpp_lifecycle::State &) {
|
|||
|
||||
CallbackReturn GzEnviroment::on_cleanup(const rclcpp_lifecycle::State &) {
|
||||
RCLCPP_INFO(getNode()->get_logger(), "GzEnviroment is on_cleanup");
|
||||
// Clear tf2 broadcasters
|
||||
// m_tf2_broadcaster.reset();
|
||||
// m_tf2_broadcaster_target.reset();
|
||||
|
||||
m_tf2_broadcaster.reset();
|
||||
m_tf2_broadcaster_target.reset();
|
||||
// Clear other variables
|
||||
m_gz_node.reset();
|
||||
m_follow_frames.clear();
|
||||
m_topic_name.clear();
|
||||
m_service_spawn.clear();
|
||||
m_world_name.clear();
|
||||
m_config_loader.reset();
|
||||
m_transforms = tf2_msgs::msg::TFMessage();
|
||||
m_target_places = tf2_msgs::msg::TFMessage();
|
||||
|
||||
return CallbackReturn::SUCCESS;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue