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