From 0f2421857bf1087546e130a0234bd8a5c93de493 Mon Sep 17 00:00:00 2001
From: Peter Albrecht <albrecpe@gmail.com>
Date: Thu, 21 Dec 2023 13:59:53 +0100
Subject: [PATCH] fix: deadlock in startExecutionWithParams

---
 .../skills_gui/memory/SkillManagerWrapper.cpp         | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/source/RobotAPI/libraries/skills_gui/memory/SkillManagerWrapper.cpp b/source/RobotAPI/libraries/skills_gui/memory/SkillManagerWrapper.cpp
index 0f99ff132..0bfd294f4 100644
--- a/source/RobotAPI/libraries/skills_gui/memory/SkillManagerWrapper.cpp
+++ b/source/RobotAPI/libraries/skills_gui/memory/SkillManagerWrapper.cpp
@@ -242,8 +242,6 @@ namespace armarx::skills::gui
     SkillManagerWrapper::startExecutionWithParams(skills::SkillID& skillId,
                                                   aron::data::DictPtr const params)
     {
-        std::scoped_lock l(mutex_memory);
-
         // Memory???
         if (!memory)
         {
@@ -259,7 +257,11 @@ namespace armarx::skills::gui
             return;
         }
 
-        const auto& skillDescriptions = this->fetchSkills().at(providerId.value());
+        std::map<skills::SkillID, skills::SkillDescription> skillDescriptions;
+        {
+            skillDescriptions = this->fetchSkills().at(providerId.value());
+        }
+
         if (skillDescriptions.find(skillId) == skillDescriptions.end())
         {
             ARMARX_IMPORTANT << "The Skill: '" << skillId.skillName
@@ -281,7 +283,8 @@ namespace armarx::skills::gui
 
         try
         {
-            memory->begin_executeSkill(req.toManagerIce());
+            std::scoped_lock l(mutex_memory);
+            memory->executeSkillAsync(req.toManagerIce());
         }
         catch (Ice::Exception const& e)
         {
-- 
GitLab