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