From 821eca10eb83a8c727f7bdd3a0740c86f6ea8c53 Mon Sep 17 00:00:00 2001
From: Fabian Paus <fabian.paus@kit.edu>
Date: Tue, 4 Jan 2022 10:23:49 +0100
Subject: [PATCH] ArViz: Fix crash while reconnecting with a selected element

  Deselect all elements before starting
  Execute callbacks only if the visualizer is running
---
 source/RobotAPI/components/ArViz/Coin/Visualizer.cpp | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/source/RobotAPI/components/ArViz/Coin/Visualizer.cpp b/source/RobotAPI/components/ArViz/Coin/Visualizer.cpp
index f1675bdd2..29e0cb329 100644
--- a/source/RobotAPI/components/ArViz/Coin/Visualizer.cpp
+++ b/source/RobotAPI/components/ArViz/Coin/Visualizer.cpp
@@ -383,6 +383,7 @@ namespace armarx::viz
             {
                 std::unique_lock<std::mutex> lock(stateMutex);
                 storage = stateStorage;
+                selection->deselectAll();
                 root->removeAllChildren();
                 layers.data.clear();
                 pulledUpdates.revision = 0;
@@ -579,6 +580,11 @@ namespace armarx::viz
 
     void CoinVisualizer::onSelection(SoPath* path)
     {
+        if (state != CoinVisualizerState::RUNNING)
+        {
+            return;
+        }
+
         ElementInteractionData* id = findInteractionDataOnPath(path);
         if (id == nullptr)
         {
@@ -623,6 +629,11 @@ namespace armarx::viz
 
     void CoinVisualizer::onDeselection(SoPath* path)
     {
+        if (state != CoinVisualizerState::RUNNING)
+        {
+            return;
+        }
+
         ElementInteractionData* id = findInteractionDataOnPath(path);
         if (id == nullptr)
         {
-- 
GitLab