ATLAS Offline Software
Loading...
Searching...
No Matches
AthenaSharedMemoryTool.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 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"
17
18#include <memory>
19#include <optional>
20#include <set>
21#include <string>
22
23// Forward declarations.
24class IIncidentSvc;
25
26namespace boost {
27 namespace interprocess {
28 class shared_memory_object;
29 class mapped_region;
30 }
31}
32
36class AthenaSharedMemoryTool : public extends<::AthAlgTool, IAthenaIPCTool> {
37public:
39 AthenaSharedMemoryTool(const std::string& type, const std::string& name, const IInterface* parent);
42
44 virtual StatusCode initialize() override;
45 virtual StatusCode stop() override;
46 virtual StatusCode finalize() override;
47
48 virtual StatusCode makeServer(int num, const std::string& streamPortSuffix) override;
49 virtual bool isServer() const override;
50 virtual StatusCode makeClient(int num, std::string& streamPortSuffix) override;
51 virtual bool isClient() const override;
52
53 virtual StatusCode putEvent ATLAS_NOT_THREAD_SAFE (long eventNumber, const void* source, size_t nbytes, unsigned int status) const override;
54 virtual StatusCode getLockedEvent(void** target, unsigned int& status) const override;
55 virtual StatusCode lockEvent(long eventNumber) const override;
56
57 virtual StatusCode putObject(const void* source, size_t nbytes, int num = 0) override;
58 virtual StatusCode getObject(void** target, size_t& nbytes, int num = 0) override;
59 virtual StatusCode clearObject(const char** tokenString, int& num) override;
60 virtual StatusCode lockObject(const char* tokenString, int num = 0) override;
61
62private:
63 Gaudi::Property<std::string> m_sharedMemory{this, "SharedMemoryName", {}};
64 Gaudi::Property<size_t> m_maxSize{this, "SharedMemoryObjectSize", 64 * 1024 * 1024, "Maximum shared memory object size in B (default = 64 MB)"};
65 Gaudi::Property<int> m_maxDataClients{this, "SharedMemoryClientSize", 256, "Maximum number of clients (default = 256)"};
66
67 int m_num{-1};
68 int m_lastClient{-1};
69 std::set<int> m_dataClients;
70 std::unique_ptr<boost::interprocess::mapped_region> m_payload;
71 std::unique_ptr<boost::interprocess::mapped_region> m_status;
73 bool m_isServer{false};
74 bool m_isClient{false};
76 mutable std::optional<InputFileIncidentGuard> m_inputFileGuard ATLAS_THREAD_SAFE;
77};
78
79#endif
RAII guard that guarantees a matching end-incident for every begin-incident.
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
std::optional< InputFileIncidentGuard > m_inputFileGuard ATLAS_THREAD_SAFE
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