From ea734f993af7fbda48dbdaf07daee8116b96c098 Mon Sep 17 00:00:00 2001
From: Christoph Pohl <christoph.pohl@kit.edu>
Date: Tue, 8 Aug 2023 10:58:51 +0200
Subject: [PATCH] Fix segfault of KinematicUnitGuiPlugin when jointStatuses are
 not reported

Signed-off-by: ARMAR-DE <>
---
 .../KinematicUnitGuiPlugin.cpp                | 20 ++++++++++++-------
 1 file changed, 13 insertions(+), 7 deletions(-)

diff --git a/source/RobotAPI/gui-plugins/KinematicUnitPlugin/KinematicUnitGuiPlugin.cpp b/source/RobotAPI/gui-plugins/KinematicUnitPlugin/KinematicUnitGuiPlugin.cpp
index 5437d499d..dd14b34d3 100644
--- a/source/RobotAPI/gui-plugins/KinematicUnitPlugin/KinematicUnitGuiPlugin.cpp
+++ b/source/RobotAPI/gui-plugins/KinematicUnitPlugin/KinematicUnitGuiPlugin.cpp
@@ -260,7 +260,7 @@ void KinematicUnitWidgetController::onConnectComponent()
 
     QMetaObject::invokeMethod(this, "resetSlider");
     enableMainWidgetAsync(true);
-    
+
     updateTask = new RunningTask<KinematicUnitWidgetController>(this, &KinematicUnitWidgetController::runUpdate);
     updateTask->start();
 }
@@ -557,7 +557,7 @@ void KinematicUnitWidgetController::kinematicUnitZeroVelocity()
 void KinematicUnitWidgetController::resetSlider()
 {
     const auto selectedControlMode = getSelectedControlMode();
-    
+
     if (selectedControlMode == eVelocityControl || selectedControlMode == eTorqueControl)
     {
         resetSliderToZeroPosition();
@@ -743,11 +743,11 @@ ControlMode KinematicUnitWidgetController::getSelectedControlMode() const
         return ControlMode::eTorqueControl;
     }
 
-    // if no button is checked, then the joint is likely initialized but no controller has been loaded yet 
+    // if no button is checked, then the joint is likely initialized but no controller has been loaded yet
     // (well, the no movement controller should be active)
     return ControlMode::eUnknown;
 
-    
+
 }
 
 void KinematicUnitWidgetController::setControlModeTorque()
@@ -1160,8 +1160,14 @@ void KinematicUnitWidgetController::updateJointStatusesTable(const NameStatusMap
 
     for (unsigned int i = 0; i < rn.size(); i++)
     {
-        NameStatusMap::const_iterator it;
-        it = reportedJointStatuses.find(rn[i]->getName());
+
+        auto it = reportedJointStatuses.find(rn[i]->getName());
+        if (it == reportedJointStatuses.end())
+        {
+            ARMARX_WARNING << deactivateSpam(5) << "Joint Status for " <<
+                rn[i]->getName() << " was not reported!";
+            continue;
+        }
         JointStatus currentStatus = it->second;
 
         QString state = translateStatus(currentStatus.operation);
@@ -1580,7 +1586,7 @@ void RangeValueDelegate::paint(QPainter* painter, const QStyleOptionViewItem& op
     }
 }
 
-KinematicUnitWidgetController::~KinematicUnitWidgetController() 
+KinematicUnitWidgetController::~KinematicUnitWidgetController()
 {
     kinematicUnitInterfacePrx = nullptr;
 
-- 
GitLab