shm: Message: refactor ctors

This commit is contained in:
Alexey Rybalchenko 2023-10-18 21:37:12 +02:00
parent 5aa6c99442
commit f05a09da5a

View File

@ -36,70 +36,25 @@ class Message final : public fair::mq::Message
public: public:
Message(Manager& manager, fair::mq::TransportFactory* factory = nullptr) Message(Manager& manager, fair::mq::TransportFactory* factory = nullptr)
: fair::mq::Message(factory) : Message(manager, Alignment{0}, factory)
, fManager(manager) {}
, fRegionPtr(nullptr)
, fLocalPtr(nullptr)
, fSize(0)
, fHint(0)
, fHandle(-1)
, fShared(-1)
, fRegionId(0)
, fSegmentId(fManager.GetSegmentId())
, fManaged(true)
, fQueued(false)
{
fManager.IncrementMsgCounter();
}
Message(Manager& manager, Alignment /* alignment */, fair::mq::TransportFactory* factory = nullptr) Message(Manager& manager, Alignment /* alignment */, fair::mq::TransportFactory* factory = nullptr)
: fair::mq::Message(factory) : fair::mq::Message(factory)
, fManager(manager) , fManager(manager)
, fRegionPtr(nullptr)
, fLocalPtr(nullptr)
, fSize(0)
, fHint(0)
, fHandle(-1)
, fShared(-1)
, fRegionId(0)
, fSegmentId(fManager.GetSegmentId()) , fSegmentId(fManager.GetSegmentId())
, fManaged(true)
, fQueued(false)
{ {
fManager.IncrementMsgCounter(); fManager.IncrementMsgCounter();
} }
Message(Manager& manager, const size_t size, fair::mq::TransportFactory* factory = nullptr) Message(Manager& manager, const size_t size, fair::mq::TransportFactory* factory = nullptr)
: fair::mq::Message(factory) : Message(manager, size, Alignment{0}, factory)
, fManager(manager) {}
, fRegionPtr(nullptr)
, fLocalPtr(nullptr)
, fSize(0)
, fHint(0)
, fHandle(-1)
, fShared(-1)
, fRegionId(0)
, fSegmentId(fManager.GetSegmentId())
, fManaged(true)
, fQueued(false)
{
InitializeChunk(size);
fManager.IncrementMsgCounter();
}
Message(Manager& manager, const size_t size, Alignment alignment, fair::mq::TransportFactory* factory = nullptr) Message(Manager& manager, const size_t size, Alignment alignment, fair::mq::TransportFactory* factory = nullptr)
: fair::mq::Message(factory) : fair::mq::Message(factory)
, fManager(manager) , fManager(manager)
, fRegionPtr(nullptr)
, fLocalPtr(nullptr)
, fSize(0)
, fHint(0)
, fHandle(-1)
, fShared(-1)
, fRegionId(0)
, fSegmentId(fManager.GetSegmentId()) , fSegmentId(fManager.GetSegmentId())
, fManaged(true)
, fQueued(false)
{ {
InitializeChunk(size, alignment.alignment); InitializeChunk(size, alignment.alignment);
fManager.IncrementMsgCounter(); fManager.IncrementMsgCounter();
@ -108,16 +63,7 @@ class Message final : public fair::mq::Message
Message(Manager& manager, void* data, const size_t size, fair::mq::FreeFn* ffn, void* hint = nullptr, fair::mq::TransportFactory* factory = nullptr) Message(Manager& manager, void* data, const size_t size, fair::mq::FreeFn* ffn, void* hint = nullptr, fair::mq::TransportFactory* factory = nullptr)
: fair::mq::Message(factory) : fair::mq::Message(factory)
, fManager(manager) , fManager(manager)
, fRegionPtr(nullptr)
, fLocalPtr(nullptr)
, fSize(0)
, fHint(0)
, fHandle(-1)
, fShared(-1)
, fRegionId(0)
, fSegmentId(fManager.GetSegmentId()) , fSegmentId(fManager.GetSegmentId())
, fManaged(true)
, fQueued(false)
{ {
if (InitializeChunk(size)) { if (InitializeChunk(size)) {
std::memcpy(fLocalPtr, data, size); std::memcpy(fLocalPtr, data, size);
@ -133,16 +79,12 @@ class Message final : public fair::mq::Message
Message(Manager& manager, UnmanagedRegionPtr& region, void* data, const size_t size, void* hint = 0, fair::mq::TransportFactory* factory = nullptr) Message(Manager& manager, UnmanagedRegionPtr& region, void* data, const size_t size, void* hint = 0, fair::mq::TransportFactory* factory = nullptr)
: fair::mq::Message(factory) : fair::mq::Message(factory)
, fManager(manager) , fManager(manager)
, fRegionPtr(nullptr)
, fLocalPtr(static_cast<char*>(data)) , fLocalPtr(static_cast<char*>(data))
, fSize(size) , fSize(size)
, fHint(reinterpret_cast<size_t>(hint)) , fHint(reinterpret_cast<size_t>(hint))
, fHandle(-1)
, fShared(-1)
, fRegionId(static_cast<UnmanagedRegionImpl*>(region.get())->fRegionId) , fRegionId(static_cast<UnmanagedRegionImpl*>(region.get())->fRegionId)
, fSegmentId(fManager.GetSegmentId()) , fSegmentId(fManager.GetSegmentId())
, fManaged(false) , fManaged(false)
, fQueued(false)
{ {
if (region->GetType() != GetType()) { if (region->GetType() != GetType()) {
LOG(error) << "region type (" << region->GetType() << ") does not match message type (" << GetType() << ")"; LOG(error) << "region type (" << region->GetType() << ") does not match message type (" << GetType() << ")";
@ -162,8 +104,6 @@ class Message final : public fair::mq::Message
Message(Manager& manager, MetaHeader& hdr, fair::mq::TransportFactory* factory = nullptr) Message(Manager& manager, MetaHeader& hdr, fair::mq::TransportFactory* factory = nullptr)
: fair::mq::Message(factory) : fair::mq::Message(factory)
, fManager(manager) , fManager(manager)
, fRegionPtr(nullptr)
, fLocalPtr(nullptr)
, fSize(hdr.fSize) , fSize(hdr.fSize)
, fHint(hdr.fHint) , fHint(hdr.fHint)
, fHandle(hdr.fHandle) , fHandle(hdr.fHandle)
@ -171,7 +111,6 @@ class Message final : public fair::mq::Message
, fRegionId(hdr.fRegionId) , fRegionId(hdr.fRegionId)
, fSegmentId(hdr.fSegmentId) , fSegmentId(hdr.fSegmentId)
, fManaged(hdr.fManaged) , fManaged(hdr.fManaged)
, fQueued(false)
{ {
fManager.IncrementMsgCounter(); fManager.IncrementMsgCounter();
} }
@ -360,16 +299,16 @@ class Message final : public fair::mq::Message
private: private:
Manager& fManager; Manager& fManager;
mutable UnmanagedRegion* fRegionPtr; mutable UnmanagedRegion* fRegionPtr = nullptr;
mutable char* fLocalPtr; mutable char* fLocalPtr = nullptr;
size_t fSize; // size of the shm buffer size_t fSize = 0; // size of the shm buffer
size_t fHint; // user-defined value, given by the user on message creation and returned to the user on "buffer no longer needed"-callbacks size_t fHint = 0; // user-defined value, given by the user on message creation and returned to the user on "buffer no longer needed"-callbacks
boost::interprocess::managed_shared_memory::handle_t fHandle; // handle to shm buffer, convertible to shm buffer ptr boost::interprocess::managed_shared_memory::handle_t fHandle = -1; // handle to shm buffer, convertible to shm buffer ptr
mutable boost::interprocess::managed_shared_memory::handle_t fShared; // handle to the buffer storing the ref count for shared buffers mutable boost::interprocess::managed_shared_memory::handle_t fShared = -1; // handle to the buffer storing the ref count for shared buffers
uint16_t fRegionId; // id of the unmanaged region uint16_t fRegionId = 0; // id of the unmanaged region
mutable uint16_t fSegmentId; // id of the managed segment mutable uint16_t fSegmentId; // id of the managed segment
bool fManaged; // true = managed segment, false = unmanaged region bool fManaged = true; // true = managed segment, false = unmanaged region
bool fQueued; bool fQueued = false;
void SetMeta(const MetaHeader& meta) void SetMeta(const MetaHeader& meta)
{ {