mirror of
https://github.com/FairRootGroup/FairMQ.git
synced 2025-10-13 16:46:47 +00:00
shmem: properly initialize received multipart messages
This commit is contained in:
parent
e6dede492e
commit
b2e027478e
|
@ -60,6 +60,27 @@ FairMQMessageSHM::FairMQMessageSHM(Manager& manager, const size_t size, FairMQTr
|
||||||
InitializeChunk(size);
|
InitializeChunk(size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FairMQMessageSHM::FairMQMessageSHM(Manager& manager, MetaHeader* hdr, FairMQTransportFactory* factory)
|
||||||
|
: FairMQMessage{factory}
|
||||||
|
, fManager(manager)
|
||||||
|
, fMessage()
|
||||||
|
, fQueued(false)
|
||||||
|
, fMetaCreated(false)
|
||||||
|
, fRegionId(hdr->fRegionId)
|
||||||
|
, fRegionPtr(nullptr)
|
||||||
|
, fHandle(hdr->fHandle)
|
||||||
|
, fSize(hdr->fSize)
|
||||||
|
, fHint(hdr->fHint)
|
||||||
|
, fLocalPtr(nullptr)
|
||||||
|
{
|
||||||
|
if (zmq_msg_init_size(&fMessage, sizeof(MetaHeader)) != 0) {
|
||||||
|
LOG(error) << "failed initializing message, reason: " << zmq_strerror(errno);
|
||||||
|
}
|
||||||
|
// fill the zmq buffer with the delivered meta data
|
||||||
|
memcpy(zmq_msg_data(&fMessage), hdr, sizeof(MetaHeader));
|
||||||
|
fMetaCreated = true;
|
||||||
|
}
|
||||||
|
|
||||||
FairMQMessageSHM::FairMQMessageSHM(Manager& manager, void* data, const size_t size, fairmq_free_fn* ffn, void* hint, FairMQTransportFactory* factory)
|
FairMQMessageSHM::FairMQMessageSHM(Manager& manager, void* data, const size_t size, fairmq_free_fn* ffn, void* hint, FairMQTransportFactory* factory)
|
||||||
: FairMQMessage{factory}
|
: FairMQMessage{factory}
|
||||||
, fManager(manager)
|
, fManager(manager)
|
||||||
|
|
|
@ -21,6 +21,16 @@
|
||||||
#include <atomic>
|
#include <atomic>
|
||||||
|
|
||||||
class FairMQSocketSHM;
|
class FairMQSocketSHM;
|
||||||
|
namespace fair
|
||||||
|
{
|
||||||
|
namespace mq
|
||||||
|
{
|
||||||
|
namespace shmem
|
||||||
|
{
|
||||||
|
class MetaHeader;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class FairMQMessageSHM final : public FairMQMessage
|
class FairMQMessageSHM final : public FairMQMessage
|
||||||
{
|
{
|
||||||
|
@ -32,6 +42,8 @@ class FairMQMessageSHM final : public FairMQMessage
|
||||||
FairMQMessageSHM(fair::mq::shmem::Manager& manager, void* data, const size_t size, fairmq_free_fn* ffn, void* hint = nullptr, FairMQTransportFactory* factory = nullptr);
|
FairMQMessageSHM(fair::mq::shmem::Manager& manager, void* data, const size_t size, fairmq_free_fn* ffn, void* hint = nullptr, FairMQTransportFactory* factory = nullptr);
|
||||||
FairMQMessageSHM(fair::mq::shmem::Manager& manager, FairMQUnmanagedRegionPtr& region, void* data, const size_t size, void* hint = 0, FairMQTransportFactory* factory = nullptr);
|
FairMQMessageSHM(fair::mq::shmem::Manager& manager, FairMQUnmanagedRegionPtr& region, void* data, const size_t size, void* hint = 0, FairMQTransportFactory* factory = nullptr);
|
||||||
|
|
||||||
|
FairMQMessageSHM(fair::mq::shmem::Manager& manager, fair::mq::shmem::MetaHeader* hdr, FairMQTransportFactory* factory = nullptr);
|
||||||
|
|
||||||
FairMQMessageSHM(const FairMQMessageSHM&) = delete;
|
FairMQMessageSHM(const FairMQMessageSHM&) = delete;
|
||||||
FairMQMessageSHM operator=(const FairMQMessageSHM&) = delete;
|
FairMQMessageSHM operator=(const FairMQMessageSHM&) = delete;
|
||||||
|
|
||||||
|
|
|
@ -213,10 +213,6 @@ int64_t FairMQSocketSHM::Send(vector<FairMQMessagePtr>& msgVec, const int timeou
|
||||||
const unsigned int vecSize = msgVec.size();
|
const unsigned int vecSize = msgVec.size();
|
||||||
int elapsed = 0;
|
int elapsed = 0;
|
||||||
|
|
||||||
if (vecSize == 1) {
|
|
||||||
return Send(msgVec.back(), timeout);
|
|
||||||
}
|
|
||||||
|
|
||||||
// put it into zmq message
|
// put it into zmq message
|
||||||
zmq_msg_t zmqMsg;
|
zmq_msg_t zmqMsg;
|
||||||
zmq_msg_init_size(&zmqMsg, vecSize * sizeof(MetaHeader));
|
zmq_msg_init_size(&zmqMsg, vecSize * sizeof(MetaHeader));
|
||||||
|
@ -322,16 +318,8 @@ int64_t FairMQSocketSHM::Receive(vector<FairMQMessagePtr>& msgVec, const int tim
|
||||||
MetaHeader* hdr = &hdrVec[m];
|
MetaHeader* hdr = &hdrVec[m];
|
||||||
|
|
||||||
// create new message (part)
|
// create new message (part)
|
||||||
msgVec.emplace_back(tools::make_unique<FairMQMessageSHM>(fManager, GetTransport()));
|
msgVec.emplace_back(tools::make_unique<FairMQMessageSHM>(fManager, hdr, GetTransport()));
|
||||||
FairMQMessageSHM* shmMsg = static_cast<FairMQMessageSHM*>(msgVec.back().get());
|
FairMQMessageSHM* shmMsg = static_cast<FairMQMessageSHM*>(msgVec.back().get());
|
||||||
// fill the zmq buffer with the delivered meta data
|
|
||||||
memcpy(zmq_msg_data(shmMsg->GetMessage()), hdr, sizeof(MetaHeader));
|
|
||||||
// set the message members with the meta data
|
|
||||||
shmMsg->fHandle = hdr->fHandle;
|
|
||||||
shmMsg->fSize = hdr->fSize;
|
|
||||||
shmMsg->fRegionId = hdr->fRegionId;
|
|
||||||
shmMsg->fHint = hdr->fHint;
|
|
||||||
|
|
||||||
totalSize += shmMsg->GetSize();
|
totalSize += shmMsg->GetSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user