diff --git a/fairmq/FairMQUnmanagedRegion.h b/fairmq/FairMQUnmanagedRegion.h index d3fe316f..21b27b19 100644 --- a/fairmq/FairMQUnmanagedRegion.h +++ b/fairmq/FairMQUnmanagedRegion.h @@ -59,6 +59,7 @@ class FairMQUnmanagedRegion virtual void* GetData() const = 0; virtual size_t GetSize() const = 0; + virtual uint64_t GetId() const = 0; FairMQTransportFactory* GetTransport() { return fTransport; } void SetTransport(FairMQTransportFactory* transport) { fTransport = transport; } diff --git a/fairmq/nanomsg/FairMQTransportFactoryNN.cxx b/fairmq/nanomsg/FairMQTransportFactoryNN.cxx index 6eb53966..7b706313 100644 --- a/fairmq/nanomsg/FairMQTransportFactoryNN.cxx +++ b/fairmq/nanomsg/FairMQTransportFactoryNN.cxx @@ -19,6 +19,7 @@ fair::mq::Transport FairMQTransportFactoryNN::fTransportType = fair::mq::Transpo FairMQTransportFactoryNN::FairMQTransportFactoryNN(const string& id, const fair::mq::ProgOptions* /*config*/) : FairMQTransportFactory(id) + , fRegionCounter(0) { LOG(debug) << "Transport: Using nanomsg library"; } @@ -67,7 +68,7 @@ FairMQPollerPtr FairMQTransportFactoryNN::CreatePoller(const unordered_map(new FairMQUnmanagedRegionNN(size, callback, path, flags, this)); + return unique_ptr(new FairMQUnmanagedRegionNN(++fRegionCounter, size, callback, path, flags, this)); } FairMQUnmanagedRegionPtr FairMQTransportFactoryNN::CreateUnmanagedRegion(const size_t size, const int64_t userFlags, FairMQRegionCallback callback, const std::string& path /* = "" */, int flags /* = 0 */) diff --git a/fairmq/nanomsg/FairMQTransportFactoryNN.h b/fairmq/nanomsg/FairMQTransportFactoryNN.h index af7b2f5a..a0fe995f 100644 --- a/fairmq/nanomsg/FairMQTransportFactoryNN.h +++ b/fairmq/nanomsg/FairMQTransportFactoryNN.h @@ -52,6 +52,7 @@ class FairMQTransportFactoryNN final : public FairMQTransportFactory private: static fair::mq::Transport fTransportType; + uint64_t fRegionCounter; mutable std::vector fSockets; }; diff --git a/fairmq/nanomsg/FairMQUnmanagedRegionNN.cxx b/fairmq/nanomsg/FairMQUnmanagedRegionNN.cxx index 638f0646..95c9fb6a 100644 --- a/fairmq/nanomsg/FairMQUnmanagedRegionNN.cxx +++ b/fairmq/nanomsg/FairMQUnmanagedRegionNN.cxx @@ -11,16 +11,18 @@ using namespace std; -FairMQUnmanagedRegionNN::FairMQUnmanagedRegionNN(const size_t size, FairMQRegionCallback callback, const std::string& /*path = "" */, int /*flags = 0 */, FairMQTransportFactory* factory /* = nullptr */) +FairMQUnmanagedRegionNN::FairMQUnmanagedRegionNN(uint64_t id, const size_t size, FairMQRegionCallback callback, const std::string& /*path = "" */, int /*flags = 0 */, FairMQTransportFactory* factory /* = nullptr */) : FairMQUnmanagedRegion(factory) + , fId(id) , fBuffer(malloc(size)) , fSize(size) , fCallback(callback) { } -FairMQUnmanagedRegionNN::FairMQUnmanagedRegionNN(const size_t size, const int64_t /*userFlags*/, FairMQRegionCallback callback, const std::string& /*path = "" */, int /*flags = 0 */, FairMQTransportFactory* factory /* = nullptr */) +FairMQUnmanagedRegionNN::FairMQUnmanagedRegionNN(uint64_t id, const size_t size, const int64_t /*userFlags*/, FairMQRegionCallback callback, const std::string& /*path = "" */, int /*flags = 0 */, FairMQTransportFactory* factory /* = nullptr */) : FairMQUnmanagedRegion(factory) + , fId(id) , fBuffer(malloc(size)) , fSize(size) , fCallback(callback) @@ -37,6 +39,12 @@ size_t FairMQUnmanagedRegionNN::GetSize() const return fSize; } +uint64_t FairMQUnmanagedRegionNN::GetId() const +{ + return fId; +} + + FairMQUnmanagedRegionNN::~FairMQUnmanagedRegionNN() { LOG(debug) << "destroying region"; diff --git a/fairmq/nanomsg/FairMQUnmanagedRegionNN.h b/fairmq/nanomsg/FairMQUnmanagedRegionNN.h index 6a4ac668..ecc3d117 100644 --- a/fairmq/nanomsg/FairMQUnmanagedRegionNN.h +++ b/fairmq/nanomsg/FairMQUnmanagedRegionNN.h @@ -19,18 +19,20 @@ class FairMQUnmanagedRegionNN final : public FairMQUnmanagedRegion friend class FairMQSocketNN; public: - FairMQUnmanagedRegionNN(const size_t size, FairMQRegionCallback callback, const std::string& path = "", int flags = 0, FairMQTransportFactory* factory = nullptr); - FairMQUnmanagedRegionNN(const size_t size, const int64_t userFlags, FairMQRegionCallback callback, const std::string& path = "", int flags = 0, FairMQTransportFactory* factory = nullptr); + FairMQUnmanagedRegionNN(uint64_t id, const size_t size, FairMQRegionCallback callback, const std::string& path = "", int flags = 0, FairMQTransportFactory* factory = nullptr); + FairMQUnmanagedRegionNN(uint64_t id, const size_t size, const int64_t userFlags, FairMQRegionCallback callback, const std::string& path = "", int flags = 0, FairMQTransportFactory* factory = nullptr); FairMQUnmanagedRegionNN(const FairMQUnmanagedRegionNN&) = delete; FairMQUnmanagedRegionNN operator=(const FairMQUnmanagedRegionNN&) = delete; - virtual void* GetData() const override; - virtual size_t GetSize() const override; + void* GetData() const override; + size_t GetSize() const override; + uint64_t GetId() const override; virtual ~FairMQUnmanagedRegionNN(); private: + uint64_t fId; void* fBuffer; size_t fSize; FairMQRegionCallback fCallback; diff --git a/fairmq/shmem/UnmanagedRegion.h b/fairmq/shmem/UnmanagedRegion.h index c034e9d8..cc16bbda 100644 --- a/fairmq/shmem/UnmanagedRegion.h +++ b/fairmq/shmem/UnmanagedRegion.h @@ -53,6 +53,7 @@ class UnmanagedRegion final : public fair::mq::UnmanagedRegion void* GetData() const override { return fRegion->get_address(); } size_t GetSize() const override { return fRegion->get_size(); } + uint64_t GetId() const override { return fRegionId; } ~UnmanagedRegion() override { fManager.RemoveRegion(fRegionId); } diff --git a/fairmq/zeromq/FairMQUnmanagedRegionZMQ.h b/fairmq/zeromq/FairMQUnmanagedRegionZMQ.h index 751f7149..c971d737 100644 --- a/fairmq/zeromq/FairMQUnmanagedRegionZMQ.h +++ b/fairmq/zeromq/FairMQUnmanagedRegionZMQ.h @@ -26,9 +26,9 @@ class FairMQUnmanagedRegionZMQ final : public FairMQUnmanagedRegion FairMQUnmanagedRegionZMQ(const FairMQUnmanagedRegionZMQ&) = delete; FairMQUnmanagedRegionZMQ operator=(const FairMQUnmanagedRegionZMQ&) = delete; - uint64_t GetId() const { return fId; } virtual void* GetData() const override; virtual size_t GetSize() const override; + uint64_t GetId() const override { return fId; } int64_t GetUserFlags() const { return fUserFlags; } virtual ~FairMQUnmanagedRegionZMQ();