From c22e0a0355e6fd866fce65e66c5eb289d28f73ba Mon Sep 17 00:00:00 2001 From: Rainer Kartmann <rainer.kartmann@kit.edu> Date: Thu, 24 Jun 2021 21:27:32 +0200 Subject: [PATCH] Init class segment before instance segment --- .../components/armem/server/ObjectMemory/ObjectMemory.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.cpp b/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.cpp index 8eed518e4..0c5d82c8d 100644 --- a/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.cpp +++ b/source/RobotAPI/components/armem/server/ObjectMemory/ObjectMemory.cpp @@ -86,8 +86,6 @@ namespace armarx::armem::server::obj { workingMemory.name() = defaultMemoryName; - instance::SegmentAdapter::init(); - const auto initSegmentWithCatch = [&](const std::string & segmentName, const auto&& fn) { try @@ -108,11 +106,15 @@ namespace armarx::armem::server::obj } }; + // Class segment needs to be initialized before instance segment, + // as the instance segment may refer to and search through the class segment. initSegmentWithCatch("class", [&]() { classSegment.init(); }); + instance::SegmentAdapter::init(); + initSegmentWithCatch("articulated object class", [&]() { articulatedObjectClassSegment.init(); @@ -206,7 +208,6 @@ namespace armarx::armem::server::obj void ObjectMemory::RemoteGui_update() { - // Non-atomic variables need to be guarded by a mutex if accessed by multiple threads tab->instance.update(*this); tab->clazz.update(classSegment); -- GitLab