shm: avoid meta data copy on recv and fix its alignment

This commit is contained in:
Alexey Rybalchenko 2021-06-24 10:51:39 +02:00
parent 9aace47d42
commit 13e5e97a50

View File

@ -161,11 +161,9 @@ class Socket final : public fair::mq::Socket
int elapsed = 0; int elapsed = 0;
Message* shmMsg = static_cast<Message*>(msg.get()); Message* shmMsg = static_cast<Message*>(msg.get());
ZMsg zmqMsg(sizeof(MetaHeader));
std::memcpy(zmqMsg.Data(), &(shmMsg->fMeta), sizeof(MetaHeader));
while (true) { while (true) {
int nbytes = zmq_msg_send(zmqMsg.Msg(), fSocket, flags); int nbytes = zmq_send(fSocket, &(shmMsg->fMeta), sizeof(MetaHeader), flags);
if (nbytes > 0) { if (nbytes > 0) {
shmMsg->fQueued = true; shmMsg->fQueued = true;
++fMessagesTx; ++fMessagesTx;
@ -196,11 +194,9 @@ class Socket final : public fair::mq::Socket
} }
int elapsed = 0; int elapsed = 0;
ZMsg zmqMsg;
while (true) { while (true) {
Message* shmMsg = static_cast<Message*>(msg.get()); Message* shmMsg = static_cast<Message*>(msg.get());
int nbytes = zmq_msg_recv(zmqMsg.Msg(), fSocket, flags); int nbytes = zmq_recv(fSocket, &(shmMsg->fMeta), sizeof(MetaHeader), flags);
if (nbytes > 0) { if (nbytes > 0) {
// check for number of received messages. must be 1 // check for number of received messages. must be 1
if (nbytes != sizeof(MetaHeader)) { if (nbytes != sizeof(MetaHeader)) {
@ -210,10 +206,7 @@ class Socket final : public fair::mq::Socket
"Expected size of ", sizeof(MetaHeader), " bytes, received ", nbytes)); "Expected size of ", sizeof(MetaHeader), " bytes, received ", nbytes));
} }
MetaHeader* hdr = static_cast<MetaHeader*>(zmqMsg.Data()); size_t size = shmMsg->GetSize();
size_t size = hdr->fSize;
shmMsg->fMeta = *hdr;
fBytesRx += size; fBytesRx += size;
++fMessagesRx; ++fMessagesRx;
return size; return size;