From 364f3f25283d3e5c685628bc9ceb7fd8b54bc210 Mon Sep 17 00:00:00 2001
From: Firat Yusuf Duran <uzivy@student.kit.edu>
Date: Thu, 27 Jun 2024 20:50:53 +0200
Subject: [PATCH] fix segfault

---
 .../skills/manager/SkillManagerComponentPlugin.cpp  | 13 +++++++++++++
 .../manager/SkillManagerComponentPluginUser.cpp     |  2 +-
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.cpp b/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.cpp
index eb6222ba8..bd5dc3ee9 100644
--- a/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.cpp
+++ b/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPlugin.cpp
@@ -979,6 +979,14 @@ namespace armarx::plugins
             s.parameters[failed.id] = failed;
             s.parameters[aborted.id] = aborted;
 
+            const auto& parameters = std::make_shared<aron::type::Object>();
+            typesLock.lock();
+            if (fluxioDC.types.find(s.id) == fluxioDC.types.end())
+            {
+                fluxioDC.types[s.id] = parameters;
+            }
+            typesLock.unlock();
+
             if (skillDescription.parametersType != nullptr)
             {
                 // input parameters
@@ -1572,8 +1580,13 @@ namespace armarx::plugins
         std::shared_lock l(fluxioDC.typesMutex);
         for (const auto& [skillId, skillTypes] : fluxioDC.types)
         {
+            if (skillTypes == nullptr) {
+                ARMARX_WARNING << "SkillTypes with id '" << skillId << "' not found.";
+                continue;
+            }
             ret->addMemberType(skillId, skillTypes);
         }
+        l.unlock();
         ret->setObjectName("SkillTypes");
         return ret;
     }
diff --git a/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPluginUser.cpp b/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPluginUser.cpp
index cee17b6de..d8bbbc3c3 100644
--- a/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPluginUser.cpp
+++ b/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPluginUser.cpp
@@ -181,7 +181,7 @@ namespace armarx
     aron::type::dto::AronObjectPtr
     SkillManagerComponentPluginUser::getTypes(const Ice::Current& current)
     {
-        const auto res = this->plugin->getTypes();
+        const auto& res = this->plugin->getTypes();
         return res->toAronObjectDTO();
     }
 
-- 
GitLab