Skip to content
Snippets Groups Projects
Commit 7628893d authored by Rainer Kartmann's avatar Rainer Kartmann
Browse files

Fix deadlock in skill provider when abortSkill() calls itself indirectly

parent 4de152fc
No related branches found
No related tags found
No related merge requests found
......@@ -82,6 +82,9 @@ namespace armarx
return "INVALID PROVIDER NAME";
}
using SkillProviderInterfacePrxMap =
std::map<std::string, skills::provider::dti::SkillProviderInterfacePrx>;
skills::provider::dto::SkillStatusUpdate
SkillManagerComponentPluginUser::executeSkill(
const skills::manager::dto::SkillExecutionRequest& info,
......@@ -97,6 +100,12 @@ namespace armarx
providerName = info.skillId.providerName;
}
SkillProviderInterfacePrxMap skillProviderMap;
{
std::scoped_lock l(skillProviderMapMutex);
skillProviderMap = this->skillProviderMap;
}
bool remove = false;
if (auto it = skillProviderMap.find(providerName); it != skillProviderMap.end())
{
......@@ -124,6 +133,8 @@ namespace armarx
if (remove)
{
std::scoped_lock l(skillProviderMapMutex);
// No copy!
SkillProviderInterfacePrxMap& skillProviderMap = this->skillProviderMap;
if (auto it = skillProviderMap.find(providerName); it != skillProviderMap.end())
{
ARMARX_WARNING << __PRETTY_FUNCTION__ << ": Found disconnected skill provider '"
......@@ -149,7 +160,12 @@ namespace armarx
const std::string& skillName,
const Ice::Current& current)
{
std::scoped_lock l(skillProviderMapMutex);
SkillProviderInterfacePrxMap skillProviderMap;
{
std::scoped_lock l(skillProviderMapMutex);
skillProviderMap = this->skillProviderMap;
}
if (auto it = skillProviderMap.find(providerName); it != skillProviderMap.end())
{
const auto& n = it->first;
......@@ -160,8 +176,8 @@ namespace armarx
}
else
{
ARMARX_WARNING << __PRETTY_FUNCTION__ << ": Found disconnected skill provider '" << n << "'. Removing it from skills.";
it = skillProviderMap.erase(it);
ARMARX_WARNING << __PRETTY_FUNCTION__ << ": Found disconnected skill provider '"
<< n << "'. Removing it from skills on next execute.";
}
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment