ATLAS Offline Software
Loading...
Searching...
No Matches
AthenaSharedMemoryTool Class Reference

This class provides the IPCTool for SharedMemory objects. More...

#include <AthenaSharedMemoryTool.h>

Inheritance diagram for AthenaSharedMemoryTool:
Collaboration diagram for AthenaSharedMemoryTool:

Public Member Functions

 AthenaSharedMemoryTool (const std::string &type, const std::string &name, const IInterface *parent)
 Standard Service Constructor.
virtual ~AthenaSharedMemoryTool ()
 Destructor.
virtual StatusCode initialize () override
 Gaudi Service Interface method implementations:
virtual StatusCode stop () override
virtual StatusCode finalize () override
virtual StatusCode makeServer (int num, const std::string &streamPortSuffix) override
virtual bool isServer () const override
virtual StatusCode makeClient (int num, std::string &streamPortSuffix) override
virtual bool isClient () const override
virtual StatusCode putEvent ATLAS_NOT_THREAD_SAFE (long eventNumber, const void *source, size_t nbytes, unsigned int status) const override
virtual StatusCode getLockedEvent (void **target, unsigned int &status) const override
virtual StatusCode lockEvent (long eventNumber) const override
virtual StatusCode putObject (const void *source, size_t nbytes, int num=0) override
virtual StatusCode getObject (void **target, size_t &nbytes, int num=0) override
virtual StatusCode clearObject (const char **tokenString, int &num) override
virtual StatusCode lockObject (const char *tokenString, int num=0) override

Private Attributes

Gaudi::Property< std::string > m_sharedMemory {this, "SharedMemoryName", {}}
Gaudi::Property< size_t > m_maxSize {this, "SharedMemoryObjectSize", 64 * 1024 * 1024, "Maximum shared memory object size in B (default = 64 MB)"}
Gaudi::Property< int > m_maxDataClients {this, "SharedMemoryClientSize", 256, "Maximum number of clients (default = 256)"}
int m_num {-1}
int m_lastClient {-1}
std::set< int > m_dataClients
std::unique_ptr< boost::interprocess::mapped_region > m_payload
std::unique_ptr< boost::interprocess::mapped_region > m_status
long m_fileSeqNumber {0}
bool m_isServer {false}
bool m_isClient {false}
ServiceHandle< IIncidentSvc > m_incidentSvc

Detailed Description

This class provides the IPCTool for SharedMemory objects.

Definition at line 34 of file AthenaSharedMemoryTool.h.

Constructor & Destructor Documentation

◆ AthenaSharedMemoryTool()

AthenaSharedMemoryTool::AthenaSharedMemoryTool ( const std::string & type,
const std::string & name,
const IInterface * parent )

Standard Service Constructor.

Definition at line 36 of file AthenaSharedMemoryTool.cxx.

38 :
39 base_class(type, name, parent),
40 m_incidentSvc("IncidentSvc", name) {
41 m_sharedMemory.setValue(name);
42}
Gaudi::Property< std::string > m_sharedMemory
ServiceHandle< IIncidentSvc > m_incidentSvc

◆ ~AthenaSharedMemoryTool()

AthenaSharedMemoryTool::~AthenaSharedMemoryTool ( )
virtual

Destructor.

Definition at line 45 of file AthenaSharedMemoryTool.cxx.

45 {
46}

Member Function Documentation

◆ ATLAS_NOT_THREAD_SAFE()

virtual StatusCode putEvent AthenaSharedMemoryTool::ATLAS_NOT_THREAD_SAFE ( long eventNumber,
const void * source,
size_t nbytes,
unsigned int status ) const
overridevirtual

◆ clearObject()

StatusCode AthenaSharedMemoryTool::clearObject ( const char ** tokenString,
int & num )
overridevirtual

Definition at line 357 of file AthenaSharedMemoryTool.cxx.

357 {
358 if (m_isClient) {
359 ShareEventHeader* evtH = static_cast<ShareEventHeader*>(m_status->get_address());
360 if (evtH->evtProcessStatus != ShareEventHeader::CLEARED) {
361 ATH_MSG_DEBUG("Waiting for FILL clearObject");
362 return(StatusCode::RECOVERABLE);
363 }
364 *tokenString = evtH->token;
365 evtH->evtProcessStatus = ShareEventHeader::UNLOCKED;
366 return(StatusCode::SUCCESS);
367 }
368
369 for (int i = 1; i <= m_num; i++) { // FIXME: PvG, do round robin
370 void* status = static_cast<char*>(m_status->get_address()) + i * sizeof(ShareEventHeader);
371 ShareEventHeader* evtH = static_cast<ShareEventHeader*>(status);
372 ShareEventHeader::ProcessStatus evtStatus = evtH->evtProcessStatus; // read only once
373 if (evtStatus == ShareEventHeader::FILLED) {
374 ATH_MSG_DEBUG("Waiting for UNFILL clearObject, client = " << i);
375 return(StatusCode::RECOVERABLE);
376 } else if (i == num && evtStatus != ShareEventHeader::LOCKED) {
377 ATH_MSG_DEBUG("Waiting for LOCK clearObject, client = " << i);
378 return(StatusCode::RECOVERABLE);
379 }
380 if (m_lastClient < 0 || m_lastClient == i) { // If Writer is not yet released, only consider last client
381 if ((i == num || num < 0) && evtStatus == ShareEventHeader::LOCKED) {
382 *tokenString = evtH->token;
383 num = i;
384 ATH_MSG_DEBUG("Setting LOCK clearObject, for client = " << num << ": " << evtH->token);
385 m_lastClient = -1;
386 // break;
387 }
388 }
389 }
390
391 if (num > 0 && *tokenString != nullptr) {
392 m_lastClient = -1; // Release Writer from last client
393 void* status = static_cast<char*>(m_status->get_address()) + num * sizeof(ShareEventHeader);
394 ShareEventHeader* evtH = static_cast<ShareEventHeader*>(status);
395 if (strncmp(*tokenString, "wait", 4) == 0) {
396 ATH_MSG_INFO("Server clearObject() got wait, client = " << num);
397 evtH->evtProcessStatus = ShareEventHeader::UNLOCKED;
398 m_lastClient = num; // Keep Writer allocated
399 num = -1;
400 return(StatusCode::SUCCESS);
401 }
402 if (strncmp(*tokenString, "release", 7) == 0) {
403 ATH_MSG_INFO("Server clearObject() got release, client = " << num);
404 evtH->evtProcessStatus = ShareEventHeader::UNLOCKED;
405 num = -1;
406 return(StatusCode::SUCCESS);
407 }
408 if (strncmp(*tokenString, "start", 5) == 0) {
409 ATH_MSG_INFO("Server clearObject() got start, client = " << num << ", of " << m_num - 1);
410 if (m_dataClients.empty()) { // Annouce all workers to prevent early writer termination
411 for (int i = 1; i < m_num - 1; i++) m_dataClients.insert(i);
412 }
413 m_dataClients.insert(num);
414 evtH->evtProcessStatus = ShareEventHeader::UNLOCKED;
415 num = -1;
416 return(StatusCode::SUCCESS);
417 }
418 if (strncmp(*tokenString, "stop", 4) == 0) {
419 ATH_MSG_INFO("Server clearObject() got stop, client = " << num);
420 m_dataClients.erase(num);
421 evtH->evtProcessStatus = ShareEventHeader::UNLOCKED;
422 if (m_dataClients.empty()) {
423 ATH_MSG_INFO("Server clearObject() got stop, client ALL: " << m_num);
424 if (num == m_num - 1) { // mother process
425 return(StatusCode::SUCCESS);
426 }
427 return(StatusCode::FAILURE);
428 }
429 num = -1;
430 return(StatusCode::SUCCESS);
431 }
432 evtH->evtSize = 0;
433 m_status->flush(0, sizeof(ShareEventHeader));
434 evtH->evtProcessStatus = ShareEventHeader::CLEARED;
435 return(StatusCode::SUCCESS);
436 }
437 return(StatusCode::RECOVERABLE);
438}
#define ATH_MSG_INFO(x)
#define ATH_MSG_DEBUG(x)
std::unique_ptr< boost::interprocess::mapped_region > m_status
status
Definition merge.py:16

◆ finalize()

StatusCode AthenaSharedMemoryTool::finalize ( )
overridevirtual

Definition at line 75 of file AthenaSharedMemoryTool.cxx.

75 {
76 ATH_MSG_INFO("in finalize()");
77 if (m_isServer) {
78 try {
79 boost::interprocess::shared_memory_object::remove(m_sharedMemory.value().c_str());
80 } catch(boost::interprocess::interprocess_exception &e) {
81 ATH_MSG_WARNING("Cannot remove shared memory " << m_sharedMemory.value() << ": " << boost::diagnostic_information(e));
82 }
83 const std::string statusName = m_sharedMemory.value() + "_status";
84 try {
85 boost::interprocess::shared_memory_object::remove(statusName.c_str());
86 } catch(boost::interprocess::interprocess_exception &e) {
87 ATH_MSG_WARNING("Cannot remove shared memory " << statusName << ": " << boost::diagnostic_information(e));
88 }
89 }
90 // Release IncidentSvc
91 if (!m_incidentSvc.release().isSuccess()) {
92 ATH_MSG_WARNING("Cannot release IncidentSvc.");
93 }
94 return(::AthAlgTool::finalize());
95}
#define ATH_MSG_WARNING(x)

◆ getLockedEvent()

StatusCode AthenaSharedMemoryTool::getLockedEvent ( void ** target,
unsigned int & status ) const
overridevirtual

Definition at line 239 of file AthenaSharedMemoryTool.cxx.

239 {
240 ShareEventHeader* evtH = static_cast<ShareEventHeader*>(m_status->get_address());
241 if (evtH->evtProcessStatus == ShareEventHeader::LOCKED) {
242 const std::size_t nbytes = evtH->evtSize;
243 if (target != nullptr) {
244 char* buf = new char[nbytes];
245 std::memcpy(buf, static_cast<char*>(m_payload->get_address()) + evtH->evtOffset, nbytes);
246 *target = buf;
247 }
248 status = evtH->evtCoreStatusFlag;
249 } else {
250 ATH_MSG_ERROR("No event locked");
251 return(StatusCode::FAILURE);
252 }
253 evtH->evtProcessStatus = ShareEventHeader::UNLOCKED;
254 return(StatusCode::SUCCESS);
255}
#define ATH_MSG_ERROR(x)
std::unique_ptr< boost::interprocess::mapped_region > m_payload

◆ getObject()

StatusCode AthenaSharedMemoryTool::getObject ( void ** target,
size_t & nbytes,
int num = 0 )
overridevirtual

Definition at line 326 of file AthenaSharedMemoryTool.cxx.

326 {
327 if (target == nullptr) {
328 return(StatusCode::SUCCESS);
329 }
330 void* status = static_cast<char*>(m_status->get_address()) + num * sizeof(ShareEventHeader);
331 ShareEventHeader* evtH = static_cast<ShareEventHeader*>(status);
332 ShareEventHeader::ProcessStatus evtStatus = evtH->evtProcessStatus; // read only once
333 size_t evtSize = evtH->evtSize; // read only once
334 if (evtStatus != ShareEventHeader::FILLED) {
335 ATH_MSG_DEBUG("Waiting for FILLED getObject, client = " << num);
336 nbytes = 0;
337 return(StatusCode::RECOVERABLE);
338 }
339 if (evtH->evtOffset < evtSize) {
340 std::memcpy(&nbytes, static_cast<char*>(m_payload->get_address()) + evtH->evtOffset, sizeof(size_t));
341 evtH->evtOffset += sizeof(size_t);
342 *target = static_cast<char*>(m_payload->get_address()) + evtH->evtOffset;
343 evtH->evtOffset += nbytes;
344 return(StatusCode::SUCCESS); // return object
345 }
346 nbytes = 0;
347 evtH->evtOffset = 0;
348 m_status->flush(num * sizeof(ShareEventHeader), sizeof(ShareEventHeader));
349 while (evtH->evtProcessStatus != ShareEventHeader::FILLED) {
350 usleep(10);
351 }
352 evtH->evtProcessStatus = ShareEventHeader::UNLOCKED;
353 return(StatusCode::SUCCESS); // unlock server
354}

◆ initialize()

StatusCode AthenaSharedMemoryTool::initialize ( )
overridevirtual

Gaudi Service Interface method implementations:

Definition at line 49 of file AthenaSharedMemoryTool.cxx.

49 {
50 ATH_MSG_INFO("Initializing " << name());
51
52 ATH_CHECK( m_incidentSvc.retrieve() );
53
54 return(StatusCode::SUCCESS);
55}
#define ATH_CHECK
Evaluate an expression and check for errors.

◆ isClient()

bool AthenaSharedMemoryTool::isClient ( ) const
overridevirtual

Definition at line 199 of file AthenaSharedMemoryTool.cxx.

199 {
200 return(m_isClient);
201}

◆ isServer()

bool AthenaSharedMemoryTool::isServer ( ) const
overridevirtual

Definition at line 139 of file AthenaSharedMemoryTool.cxx.

139 {
140 return(m_isServer);
141}

◆ lockEvent()

StatusCode AthenaSharedMemoryTool::lockEvent ( long eventNumber) const
overridevirtual

Definition at line 258 of file AthenaSharedMemoryTool.cxx.

258 {
259 ShareEventHeader* evtH = static_cast<ShareEventHeader*>(m_status->get_address());
260 if (evtH->evtSeqNumber > eventNumber) {
261 ATH_MSG_ERROR("eventNumber = " << eventNumber << ", already processed");
262 return(StatusCode::FAILURE);
263 }
264 if (evtH->evtSeqNumber == 0 && evtH->fileSeqNumber == 0 && evtH->evtSize == 0) {
265 ATH_MSG_DEBUG("Server has been terminated");
266 return(StatusCode::FAILURE);
267 }
268 if (evtH->evtSeqNumber != eventNumber || evtH->evtProcessStatus != ShareEventHeader::FILLED) {
269 ATH_MSG_DEBUG("Waiting for lockEvent, eventNumber = " << eventNumber);
270 return(StatusCode::RECOVERABLE);
271 }
272 if (evtH->fileSeqNumber != m_fileSeqNumber && m_fileSeqNumber > 0) {
273 FileIncident endFileIncident(name(), "EndInputFile", "SHM");
274 m_incidentSvc->fireIncident(endFileIncident);
275 const_cast<AthenaSharedMemoryTool*>(this)->m_fileSeqNumber = evtH->fileSeqNumber;
276 FileIncident beginFileIncident(name(), "BeginInputFile", "SHM");
277 m_incidentSvc->fireIncident(beginFileIncident);
278 }
279 ATH_MSG_DEBUG("Locking eventNumber = " << eventNumber);
280 evtH->evtProcessStatus = ShareEventHeader::LOCKED;
281 return(StatusCode::SUCCESS);
282}
AthenaSharedMemoryTool(const std::string &type, const std::string &name, const IInterface *parent)
Standard Service Constructor.

◆ lockObject()

StatusCode AthenaSharedMemoryTool::lockObject ( const char * tokenString,
int num = 0 )
overridevirtual

Definition at line 441 of file AthenaSharedMemoryTool.cxx.

441 {
442 if (strlen(tokenString) >= maxTokenLength) {
443 ATH_MSG_ERROR("Token = " << tokenString << ", too long for AthenaSharedMemoryTool");
444 return(StatusCode::FAILURE);
445 }
446 void* status = static_cast<char*>(m_status->get_address()) + num * sizeof(ShareEventHeader);
447 ShareEventHeader* evtH = static_cast<ShareEventHeader*>(status);
448 if (evtH->evtProcessStatus != ShareEventHeader::UNLOCKED) {
449 ATH_MSG_DEBUG("Waiting for UNLOCKED lockObject: " << tokenString);
450 return(StatusCode::RECOVERABLE);
451 }
452 strncpy(evtH->token, tokenString, maxTokenLength - 1); evtH->token[maxTokenLength - 1] = 0;
453 if (m_isServer) {
454 evtH->evtSize = 0;
455 m_status->flush(num * sizeof(ShareEventHeader), sizeof(ShareEventHeader));
456 evtH->evtProcessStatus = ShareEventHeader::CLEARED;
457 } else {
458 m_status->flush(num * sizeof(ShareEventHeader), sizeof(ShareEventHeader));
459 evtH->evtProcessStatus = ShareEventHeader::LOCKED;
460 }
461 return(StatusCode::SUCCESS);
462}
const std::size_t maxTokenLength

◆ makeClient()

StatusCode AthenaSharedMemoryTool::makeClient ( int num,
std::string & streamPortSuffix )
overridevirtual

Definition at line 144 of file AthenaSharedMemoryTool.cxx.

144 {
145 if (m_isServer) {
146 ATH_MSG_ERROR("Cannot make AthenaSharedMemoryTool a Client.");
147 return(StatusCode::FAILURE);
148 }
149 if (num >= m_maxDataClients) {
150 ATH_MSG_ERROR("Too many clients for AthenaSharedMemoryTool.");
151 return(StatusCode::FAILURE);
152 }
153 if (m_num > 0 && num <= 0) {// stop running client
154 ATH_MSG_DEBUG("Stop AthenaSharedMemoryTool Client.");
155 m_num = -1;
156 while (lockObject("stop").isRecoverable()) {
157 usleep(100);
158 }
159 ShareEventHeader* evtH = static_cast<ShareEventHeader*>(m_status->get_address());
160 while (evtH->evtProcessStatus != ShareEventHeader::UNLOCKED) {
161 usleep(100);
162 }
163 m_payload.reset();
164 m_status.reset();
165 m_isClient = false;
166 return(StatusCode::SUCCESS);
167 }
168 while (!m_isClient) {
169 try { // Check whether Server created shared memory object
170 const std::string statusName = m_sharedMemory.value() + "_status";
171 boost::interprocess::shared_memory_object shm_status(boost::interprocess::open_only,
172 statusName.c_str(),
173 boost::interprocess::read_write);
174 m_status = std::make_unique<boost::interprocess::mapped_region>(shm_status, boost::interprocess::read_write, num * sizeof(ShareEventHeader), sizeof(ShareEventHeader));
175 boost::interprocess::shared_memory_object shm(boost::interprocess::open_only,
176 m_sharedMemory.value().c_str(),
177 boost::interprocess::read_write);
178 m_payload = std::make_unique<boost::interprocess::mapped_region>(shm, boost::interprocess::read_write, 0, m_maxSize);
179 m_isClient = true;
180 } catch (boost::interprocess::interprocess_exception& e) {
181 usleep(100000);
182 }
183 }
184 if (m_num <= 0 && num > 0) {
185 ShareEventHeader* evtH = static_cast<ShareEventHeader*>(m_status->get_address());
186 streamPortSuffix.assign(evtH->token);
187 while (lockObject("start").isRecoverable()) {
188 usleep(100);
189 }
190 while (evtH->evtProcessStatus != ShareEventHeader::UNLOCKED) {
191 usleep(100);
192 }
193 m_num = num;
194 }
195 return(StatusCode::SUCCESS);
196}
virtual StatusCode lockObject(const char *tokenString, int num=0) override
Gaudi::Property< size_t > m_maxSize
Gaudi::Property< int > m_maxDataClients

◆ makeServer()

StatusCode AthenaSharedMemoryTool::makeServer ( int num,
const std::string & streamPortSuffix )
overridevirtual

Definition at line 98 of file AthenaSharedMemoryTool.cxx.

98 {
99 if (m_isServer || m_isClient) {
100 ATH_MSG_ERROR("Cannot make AthenaSharedMemoryTool a Server.");
101 return(StatusCode::FAILURE);
102 }
103 if (num > m_maxDataClients) {
104 ATH_MSG_ERROR("Too many clients for AthenaSharedMemoryTool Server.");
105 return(StatusCode::FAILURE);
106 }
107 m_num = num;
108 m_isServer = true;
109 ATH_MSG_DEBUG("Creating shared memory object with name \"" << m_sharedMemory.value() << "\"");
110 std::optional<boost::interprocess::shared_memory_object> shm;
111 try {
112 shm.emplace(boost::interprocess::create_only, m_sharedMemory.value().c_str(), boost::interprocess::read_write);
113 } catch(boost::interprocess::interprocess_exception &e) {
114 ATH_MSG_ERROR("Cannot create shared memory " << m_sharedMemory.value() << ": " << boost::diagnostic_information(e));
115 return StatusCode::FAILURE;
116 }
117 shm->truncate(m_maxSize);
118 m_payload = std::make_unique<boost::interprocess::mapped_region>(*shm, boost::interprocess::read_write, 0, m_maxSize);
119 const std::string statusName = m_sharedMemory.value() + "_status";
120 std::optional<boost::interprocess::shared_memory_object> shm_status;
121 try {
122 shm_status.emplace(boost::interprocess::create_only, statusName.c_str(), boost::interprocess::read_write);
123 } catch(boost::interprocess::interprocess_exception &e) {
124 ATH_MSG_ERROR("Cannot create shared memory " << statusName << ": " << boost::diagnostic_information(e));
125 return StatusCode::FAILURE;
126 }
127 shm_status->truncate(num * sizeof(ShareEventHeader));
128 m_status = std::make_unique<boost::interprocess::mapped_region>(*shm_status, boost::interprocess::read_write, 0, num * sizeof(ShareEventHeader));
129 ShareEventHeader evtH = { ShareEventHeader::UNLOCKED, -1, -1, 0, 0, 0, "" };
130 std::memcpy(evtH.token, streamPortSuffix.c_str(), maxTokenLength - 1);
131 evtH.token[maxTokenLength - 1] = 0;
132 for (int i = 0; i < num; i++) {
133 std::memcpy(static_cast<char*>(m_status->get_address()) + i * sizeof(ShareEventHeader), &evtH, sizeof(ShareEventHeader));
134 }
135 return(StatusCode::SUCCESS);
136}

◆ putObject()

StatusCode AthenaSharedMemoryTool::putObject ( const void * source,
size_t nbytes,
int num = 0 )
overridevirtual

Definition at line 285 of file AthenaSharedMemoryTool.cxx.

285 {
286 if (nbytes > m_maxSize) {
287 ATH_MSG_ERROR("Object size = " << nbytes << " greater than maximum for client = " << num);
288 return(StatusCode::FAILURE);
289 }
290 void* status = static_cast<char*>(m_status->get_address()) + num * sizeof(ShareEventHeader);
291 ShareEventHeader* evtH = static_cast<ShareEventHeader*>(status);
292 ShareEventHeader::ProcessStatus evtStatus = evtH->evtProcessStatus; // read only once
293 if (evtStatus != ShareEventHeader::CLEARED) {
294 ATH_MSG_DEBUG("Waiting for CLEARED putObject, client = " << num << ", in state " << evtStatus);
295 return(StatusCode::RECOVERABLE);
296 }
297 if (source == nullptr) {
298 evtH->evtSize = evtH->evtOffset;
299 evtH->evtOffset = 0;
300 m_payload->flush(0 + evtH->evtOffset, evtH->evtSize);
301 m_status->flush(num * sizeof(ShareEventHeader), sizeof(ShareEventHeader));
302 evtH->evtProcessStatus = ShareEventHeader::FILLED;
303 } else {
304 if (evtH->evtOffset + sizeof(size_t) + nbytes > m_maxSize) {
305 ATH_MSG_ERROR("Object location = " << evtH->evtOffset << " greater than maximum for client = " << num);
306 return(StatusCode::FAILURE);
307 }
308 bool first = (evtH->evtOffset == 0);
309 std::memcpy(static_cast<char*>(m_payload->get_address()) + evtH->evtOffset, &nbytes, sizeof(size_t));
310 evtH->evtOffset += sizeof(size_t);
311 std::memcpy(static_cast<char*>(m_payload->get_address()) + evtH->evtOffset, source, nbytes);
312 evtH->evtOffset += nbytes;
313 if (evtH->evtSize == m_maxSize) {
314 evtH->evtSize = evtH->evtOffset;
315 }
316 if (first) {
317 evtH->evtSize = m_maxSize;
318 m_payload->flush(0, evtH->evtOffset);
319 m_status->flush(num * sizeof(ShareEventHeader), sizeof(ShareEventHeader));
320 }
321 }
322 return(StatusCode::SUCCESS);
323}
bool first
Definition DeMoScan.py:534

◆ stop()

StatusCode AthenaSharedMemoryTool::stop ( )
overridevirtual

Definition at line 58 of file AthenaSharedMemoryTool.cxx.

58 {
59 ATH_MSG_INFO("in stop()");
60 if (m_isClient && m_num > 0) {
61 ATH_MSG_INFO("Client stop() inform Server: " << m_num);
62 m_num = -1;
63 while (lockObject("stop").isRecoverable()) {
64 usleep(100);
65 }
66 ShareEventHeader* evtH = static_cast<ShareEventHeader*>(m_status->get_address());
67 while (evtH->evtProcessStatus != ShareEventHeader::UNLOCKED) {
68 usleep(100);
69 }
70 }
71 return(StatusCode::SUCCESS);
72}

Member Data Documentation

◆ m_dataClients

std::set<int> AthenaSharedMemoryTool::m_dataClients
private

Definition at line 67 of file AthenaSharedMemoryTool.h.

◆ m_fileSeqNumber

long AthenaSharedMemoryTool::m_fileSeqNumber {0}
private

Definition at line 70 of file AthenaSharedMemoryTool.h.

70{0};

◆ m_incidentSvc

ServiceHandle<IIncidentSvc> AthenaSharedMemoryTool::m_incidentSvc
private

Definition at line 73 of file AthenaSharedMemoryTool.h.

◆ m_isClient

bool AthenaSharedMemoryTool::m_isClient {false}
private

Definition at line 72 of file AthenaSharedMemoryTool.h.

72{false};

◆ m_isServer

bool AthenaSharedMemoryTool::m_isServer {false}
private

Definition at line 71 of file AthenaSharedMemoryTool.h.

71{false};

◆ m_lastClient

int AthenaSharedMemoryTool::m_lastClient {-1}
private

Definition at line 66 of file AthenaSharedMemoryTool.h.

66{-1};

◆ m_maxDataClients

Gaudi::Property<int> AthenaSharedMemoryTool::m_maxDataClients {this, "SharedMemoryClientSize", 256, "Maximum number of clients (default = 256)"}
private

Definition at line 63 of file AthenaSharedMemoryTool.h.

63{this, "SharedMemoryClientSize", 256, "Maximum number of clients (default = 256)"};

◆ m_maxSize

Gaudi::Property<size_t> AthenaSharedMemoryTool::m_maxSize {this, "SharedMemoryObjectSize", 64 * 1024 * 1024, "Maximum shared memory object size in B (default = 64 MB)"}
private

Definition at line 62 of file AthenaSharedMemoryTool.h.

62{this, "SharedMemoryObjectSize", 64 * 1024 * 1024, "Maximum shared memory object size in B (default = 64 MB)"};

◆ m_num

int AthenaSharedMemoryTool::m_num {-1}
private

Definition at line 65 of file AthenaSharedMemoryTool.h.

65{-1};

◆ m_payload

std::unique_ptr<boost::interprocess::mapped_region> AthenaSharedMemoryTool::m_payload
private

Definition at line 68 of file AthenaSharedMemoryTool.h.

◆ m_sharedMemory

Gaudi::Property<std::string> AthenaSharedMemoryTool::m_sharedMemory {this, "SharedMemoryName", {}}
private

Definition at line 61 of file AthenaSharedMemoryTool.h.

61{this, "SharedMemoryName", {}};

◆ m_status

std::unique_ptr<boost::interprocess::mapped_region> AthenaSharedMemoryTool::m_status
private

Definition at line 69 of file AthenaSharedMemoryTool.h.


The documentation for this class was generated from the following files: