From 00e6e55430eed714c3023a0aed17dffcc9ac4485 Mon Sep 17 00:00:00 2001
From: Fabian Peller <fabian.peller-konrad@kit.edu>
Date: Thu, 16 Nov 2023 16:10:15 +0100
Subject: [PATCH] remove mutex from simple memory writer (makes it copyable)

---
 .../armem/client/util/SimpleWriterBase.cpp    |  6 -----
 .../armem/client/util/SimpleWriterBase.h      |  2 --
 .../client/occupancy_grid/Writer.cpp          | 25 +++++++++++--------
 3 files changed, 14 insertions(+), 19 deletions(-)

diff --git a/source/RobotAPI/libraries/armem/client/util/SimpleWriterBase.cpp b/source/RobotAPI/libraries/armem/client/util/SimpleWriterBase.cpp
index e5d468c55..3d8907a34 100644
--- a/source/RobotAPI/libraries/armem/client/util/SimpleWriterBase.cpp
+++ b/source/RobotAPI/libraries/armem/client/util/SimpleWriterBase.cpp
@@ -44,12 +44,6 @@ namespace armarx::armem::client::util
         }
     }
 
-    std::mutex&
-    SimpleWriterBase::memoryWriterMutex()
-    {
-        return memoryMutex;
-    }
-
     armem::client::Writer&
     SimpleWriterBase::memoryWriter()
     {
diff --git a/source/RobotAPI/libraries/armem/client/util/SimpleWriterBase.h b/source/RobotAPI/libraries/armem/client/util/SimpleWriterBase.h
index 13a54cc5b..895376b0a 100644
--- a/source/RobotAPI/libraries/armem/client/util/SimpleWriterBase.h
+++ b/source/RobotAPI/libraries/armem/client/util/SimpleWriterBase.h
@@ -58,7 +58,6 @@ namespace armarx::armem::client::util
         virtual std::string propertyPrefix() const = 0;
         virtual Properties defaultProperties() const = 0;
 
-        std::mutex& memoryWriterMutex();
         armem::client::Writer& memoryWriter();
 
 
@@ -66,7 +65,6 @@ namespace armarx::armem::client::util
         Properties props;
 
         armem::client::Writer memoryWriterClient;
-        std::mutex memoryMutex;
     };
 
 } // namespace armarx::armem::client::util
diff --git a/source/RobotAPI/libraries/armem_vision/client/occupancy_grid/Writer.cpp b/source/RobotAPI/libraries/armem_vision/client/occupancy_grid/Writer.cpp
index a68216255..9c06db1e5 100644
--- a/source/RobotAPI/libraries/armem_vision/client/occupancy_grid/Writer.cpp
+++ b/source/RobotAPI/libraries/armem_vision/client/occupancy_grid/Writer.cpp
@@ -1,19 +1,21 @@
 #include "Writer.h"
 
-#include <RobotAPI/libraries/armem_vision/aron_conversions.h>
 #include <RobotAPI/libraries/armem_vision/aron/OccupancyGrid.aron.generated.h>
-
+#include <RobotAPI/libraries/armem_vision/aron_conversions.h>
 
 namespace armarx::armem::vision::occupancy_grid::client
 {
     Writer::~Writer() = default;
 
-    bool Writer::store(const OccupancyGrid& grid,
-                       const std::string& frame,
-                       const std::string& providerName,
-                       const std::int64_t& timestamp)
+    bool
+    Writer::store(const OccupancyGrid& grid,
+                  const std::string& frame,
+                  const std::string& providerName,
+                  const std::int64_t& timestamp)
     {
-        std::lock_guard g{memoryWriterMutex()};
+        static std::mutex mutex;
+
+        std::lock_guard g{mutex};
 
         const auto result = memoryWriter().addSegment(properties().coreSegmentName, providerName);
 
@@ -28,7 +30,7 @@ namespace armarx::armem::vision::occupancy_grid::client
         const auto iceTimestamp = Time(Duration::MicroSeconds(timestamp));
 
         const auto providerId = armem::MemoryID(result.segmentID);
-        const auto entityID   = providerId.withEntityName(frame).withTimestamp(iceTimestamp);
+        const auto entityID = providerId.withEntityName(frame).withTimestamp(iceTimestamp);
 
         armem::EntityUpdate update;
         update.entityID = entityID;
@@ -41,7 +43,7 @@ namespace armarx::armem::vision::occupancy_grid::client
         dict->addElement("grid", toAron(grid.grid));
 
         update.instancesData = {dict};
-        update.referencedTime   = iceTimestamp;
+        update.referencedTime = iceTimestamp;
 
         ARMARX_DEBUG << "Committing " << update << " at time " << iceTimestamp;
         armem::EntityUpdateResult updateResult = memoryWriter().commit(update);
@@ -56,7 +58,8 @@ namespace armarx::armem::vision::occupancy_grid::client
         return updateResult.success;
     }
 
-    std::string Writer::propertyPrefix() const
+    std::string
+    Writer::propertyPrefix() const
     {
         return "mem.vision.occupancy_grid.";
     }
@@ -65,7 +68,7 @@ namespace armarx::armem::vision::occupancy_grid::client
     Writer::defaultProperties() const
     {
 
-        return SimpleWriterBase::Properties{.memoryName      = "Vision",
+        return SimpleWriterBase::Properties{.memoryName = "Vision",
                                             .coreSegmentName = "OccupancyGrid"};
     }
 } // namespace armarx::armem::vision::occupancy_grid::client
-- 
GitLab