From 841b41832b99701a32d98f1b7d50f886cdb918ac Mon Sep 17 00:00:00 2001 From: Dennis Klein Date: Mon, 15 Aug 2022 15:30:15 +0200 Subject: [PATCH] fix(shm): Handle pre-conditions --- fairmq/shmem/Socket.h | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/fairmq/shmem/Socket.h b/fairmq/shmem/Socket.h index 3d373880..eb912d5f 100644 --- a/fairmq/shmem/Socket.h +++ b/fairmq/shmem/Socket.h @@ -11,8 +11,9 @@ #include "Common.h" #include "Manager.h" #include "Message.h" -#include +#include #include +#include #include #include @@ -125,16 +126,21 @@ class Socket final : public fair::mq::Socket return zmq::Connect(fSocket, address, fId); } - int64_t Send(MessagePtr& msg, int timeout = -1) override + int64_t Send(mq::MessagePtr& msg, int timeout = -1) override { + auto msgPtr = msg.get(); + if (!msgPtr) { + return static_cast(TransferCode::error); + } + assertm(dynamic_cast(msgPtr), "given mq::Message is a shmem::Message"); // NOLINT + auto shmMsg = static_cast(msgPtr); // NOLINT(cppcoreguidelines-pro-type-static-cast-downcast) + int flags = 0; if (timeout == 0) { flags = ZMQ_DONTWAIT; } int elapsed = 0; - Message* shmMsg = static_cast(msg.get()); - while (true) { int nbytes = zmq_send(fSocket, &(shmMsg->fMeta), sizeof(MetaHeader), flags); if (nbytes > 0) { @@ -213,7 +219,12 @@ class Socket final : public fair::mq::Socket MetaHeader* metas = static_cast(zmqMsg.Data()); for (auto& msg : msgVec) { - Message* shmMsg = static_cast(msg.get()); + auto msgPtr = msg.get(); + if (!msgPtr) { + return static_cast(TransferCode::error); + } + assertm(dynamic_cast(msgPtr), "given mq::Message is a shmem::Message"); // NOLINT + auto shmMsg = static_cast(msgPtr); // NOLINT(cppcoreguidelines-pro-type-static-cast-downcast) std::memcpy(metas++, &(shmMsg->fMeta), sizeof(MetaHeader)); }