From fdfde95dec276c241108720250997fb2e9edcab3 Mon Sep 17 00:00:00 2001 From: Alexey Rybalchenko Date: Wed, 7 Sep 2022 23:26:04 +0200 Subject: [PATCH] region example: fix race between segment reset & presence check --- examples/region/keep-alive.cxx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/examples/region/keep-alive.cxx b/examples/region/keep-alive.cxx index 2509295b..98234bf4 100644 --- a/examples/region/keep-alive.cxx +++ b/examples/region/keep-alive.cxx @@ -19,6 +19,7 @@ #include #include #include +#include #include #include @@ -113,6 +114,7 @@ struct ShmManager bool CheckPresence() { + std::lock_guard lock(localMtx); for (const auto& sc : segmentCfgs) { if (!(fair::mq::shmem::Monitor::SegmentIsPresent(fair::mq::shmem::ShmId{shmId}, sc.id))) { return false; @@ -128,6 +130,7 @@ struct ShmManager void ResetContent() { + std::lock_guard lock(localMtx); fair::mq::shmem::Monitor::ResetContent(fair::mq::shmem::ShmId{shmId}, segmentCfgs, regionCfgs); } @@ -145,6 +148,7 @@ struct ShmManager } std::string shmId; + std::mutex localMtx; map segments; map> regions; std::vector segmentCfgs;