ATLAS Offline Software
Loading...
Searching...
No Matches
AthenaSharedMemoryTool.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef ATHENASHAREDMEMORYTOOL_H
6#define ATHENASHAREDMEMORYTOOL_H
7
12
13#include "GaudiKernel/ServiceHandle.h"
16
17#include <memory>
18#include <set>
19#include <string>
20
21// Forward declarations.
22class IIncidentSvc;
23
24namespace boost {
25 namespace interprocess {
26 class shared_memory_object;
27 class mapped_region;
28 }
29}
30
34class AthenaSharedMemoryTool : public extends<::AthAlgTool, IAthenaIPCTool> {
35public:
37 AthenaSharedMemoryTool(const std::string& type, const std::string& name, const IInterface* parent);
40
42 virtual StatusCode initialize() override;
43 virtual StatusCode stop() override;
44 virtual StatusCode finalize() override;
45
46 virtual StatusCode makeServer(int num, const std::string& streamPortSuffix) override;
47 virtual bool isServer() const override;
48 virtual StatusCode makeClient(int num, std::string& streamPortSuffix) override;
49 virtual bool isClient() const override;
50
51 virtual StatusCode putEvent ATLAS_NOT_THREAD_SAFE (long eventNumber, const void* source, size_t nbytes, unsigned int status) const override;
52 virtual StatusCode getLockedEvent(void** target, unsigned int& status) const override;
53 virtual StatusCode lockEvent(long eventNumber) const override;
54
55 virtual StatusCode putObject(const void* source, size_t nbytes, int num = 0) override;
56 virtual StatusCode getObject(void** target, size_t& nbytes, int num = 0) override;
57 virtual StatusCode clearObject(const char** tokenString, int& num) override;
58 virtual StatusCode lockObject(const char* tokenString, int num = 0) override;
59
60private:
61 Gaudi::Property<std::string> m_sharedMemory{this, "SharedMemoryName", {}};
62 Gaudi::Property<size_t> m_maxSize{this, "SharedMemoryObjectSize", 64 * 1024 * 1024, "Maximum shared memory object size in B (default = 64 MB)"};
63 Gaudi::Property<int> m_maxDataClients{this, "SharedMemoryClientSize", 256, "Maximum number of clients (default = 256)"};
64
65 int m_num{-1};
66 int m_lastClient{-1};
67 std::set<int> m_dataClients;
68 std::unique_ptr<boost::interprocess::mapped_region> m_payload;
69 std::unique_ptr<boost::interprocess::mapped_region> m_status;
71 bool m_isServer{false};
72 bool m_isClient{false};
74};
75
76#endif
std::unique_ptr< boost::interprocess::mapped_region > m_payload
virtual StatusCode lockEvent(long eventNumber) const override
virtual StatusCode initialize() override
Gaudi Service Interface method implementations:
virtual StatusCode putEvent ATLAS_NOT_THREAD_SAFE(long eventNumber, const void *source, size_t nbytes, unsigned int status) const override
Gaudi::Property< std::string > m_sharedMemory
std::unique_ptr< boost::interprocess::mapped_region > m_status
virtual bool isClient() const override
virtual StatusCode clearObject(const char **tokenString, int &num) override
ServiceHandle< IIncidentSvc > m_incidentSvc
virtual StatusCode lockObject(const char *tokenString, int num=0) override
virtual StatusCode getObject(void **target, size_t &nbytes, int num=0) override
Gaudi::Property< size_t > m_maxSize
virtual StatusCode getLockedEvent(void **target, unsigned int &status) const override
virtual StatusCode stop() override
virtual StatusCode makeClient(int num, std::string &streamPortSuffix) override
virtual bool isServer() const override
Gaudi::Property< int > m_maxDataClients
virtual StatusCode finalize() override
virtual StatusCode putObject(const void *source, size_t nbytes, int num=0) override
AthenaSharedMemoryTool(const std::string &type, const std::string &name, const IInterface *parent)
Standard Service Constructor.
virtual ~AthenaSharedMemoryTool()
Destructor.
virtual StatusCode makeServer(int num, const std::string &streamPortSuffix) override