From 843b1137393344b88a76be3e95dbf80754d09b88 Mon Sep 17 00:00:00 2001 From: Mirko Waechter <mirko.waechter@kit.edu> Date: Wed, 14 Nov 2018 16:54:12 +0100 Subject: [PATCH] fixed race condition in TCPControllerSubUnit --- .../units/RobotUnit/Units/TCPControllerSubUnit.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/source/RobotAPI/components/units/RobotUnit/Units/TCPControllerSubUnit.cpp b/source/RobotAPI/components/units/RobotUnit/Units/TCPControllerSubUnit.cpp index 873814d8e..ef3cb1009 100644 --- a/source/RobotAPI/components/units/RobotUnit/Units/TCPControllerSubUnit.cpp +++ b/source/RobotAPI/components/units/RobotUnit/Units/TCPControllerSubUnit.cpp @@ -120,11 +120,21 @@ void TCPControllerSubUnit::setTCPVelocity(const std::string& nodeSetName, const } ARMARX_DEBUG << "CartesianSelection-Mode: " << (int)mode; auto controllerName = this->getName() + "_" + tcp + "_" + nodeSetName + "_mode_" + std::to_string((int)mode); - auto activeNJointControllers = robotUnit->getNJointControllersNotNull(robotUnit->getNJointControllerNames()); + auto NJointControllers = robotUnit->getNJointControllerNames(); NJointCartesianVelocityControllerWithRampPtr tcpController; bool nodeSetAlreadyControlled = false; - for (NJointControllerPtr controller : activeNJointControllers) + for (auto& name : NJointControllers) { + NJointControllerPtr controller; + try + { + controller = robotUnit->getNJointControllerNotNull(name); + } + catch (...) + { + continue; + } + tcpController = NJointCartesianVelocityControllerWithRampPtr::dynamicCast(controller); if (!tcpController) { -- GitLab