From db0937f339cd6d1f3dbc5143182fa8173de084a1 Mon Sep 17 00:00:00 2001 From: Alexey Rybalchenko Date: Wed, 25 Nov 2020 13:29:56 +0100 Subject: [PATCH] shm: ensure local segments are complete for region subscriptions --- fairmq/shmem/Manager.h | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/fairmq/shmem/Manager.h b/fairmq/shmem/Manager.h index 6651da9a..2427b596 100644 --- a/fairmq/shmem/Manager.h +++ b/fairmq/shmem/Manager.h @@ -367,13 +367,20 @@ class Manager } for (const auto& e : *fShmSegments) { - fair::mq::RegionInfo info; - info.managed = true; - info.id = e.first; - info.event = RegionEvent::created; - info.ptr = boost::apply_visitor(SegmentAddress{}, fSegments.at(e.first)); - info.size = boost::apply_visitor(SegmentSize{}, fSegments.at(e.first)); - result.push_back(info); + // make sure any segments in the session are found + GetSegment(e.first); + try { + fair::mq::RegionInfo info; + info.managed = true; + info.id = e.first; + info.event = RegionEvent::created; + info.ptr = boost::apply_visitor(SegmentAddress{}, fSegments.at(e.first)); + info.size = boost::apply_visitor(SegmentSize{}, fSegments.at(e.first)); + result.push_back(info); + } catch (const std::out_of_range& oor) { + LOG(error) << "could not find segment with id " << e.first; + LOG(error) << oor.what(); + } } return result; @@ -474,7 +481,7 @@ class Manager try { // get region info SegmentInfo segmentInfo = fShmSegments->at(id); - LOG(info) << "LOCATED SEGMENT WITH ID '" << id << "'"; + LOG(debug) << "Located segment with id '" << id << "'"; using namespace boost::interprocess;