mirror of
https://github.com/FairRootGroup/FairMQ.git
synced 2025-10-13 08:41:16 +00:00
Add linger setting for unmanaged region
This commit is contained in:
parent
7aec6f91de
commit
3364da9541
|
@ -10,6 +10,7 @@
|
||||||
#define FAIRMQUNMANAGEDREGION_H_
|
#define FAIRMQUNMANAGEDREGION_H_
|
||||||
|
|
||||||
#include <cstddef> // size_t
|
#include <cstddef> // size_t
|
||||||
|
#include <cstdint> // uint32_t
|
||||||
#include <memory> // std::unique_ptr
|
#include <memory> // std::unique_ptr
|
||||||
#include <functional> // std::function
|
#include <functional> // std::function
|
||||||
#include <ostream> // std::ostream
|
#include <ostream> // std::ostream
|
||||||
|
@ -72,6 +73,8 @@ class FairMQUnmanagedRegion
|
||||||
virtual void* GetData() const = 0;
|
virtual void* GetData() const = 0;
|
||||||
virtual size_t GetSize() const = 0;
|
virtual size_t GetSize() const = 0;
|
||||||
virtual uint64_t GetId() const = 0;
|
virtual uint64_t GetId() const = 0;
|
||||||
|
virtual void SetLinger(uint32_t linger) = 0;
|
||||||
|
virtual uint32_t GetLinger() const = 0;
|
||||||
|
|
||||||
FairMQTransportFactory* GetTransport() { return fTransport; }
|
FairMQTransportFactory* GetTransport() { return fTransport; }
|
||||||
void SetTransport(FairMQTransportFactory* transport) { fTransport = transport; }
|
void SetTransport(FairMQTransportFactory* transport) { fTransport = transport; }
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
#include <boost/interprocess/ipc/message_queue.hpp>
|
#include <boost/interprocess/ipc/message_queue.hpp>
|
||||||
|
|
||||||
#include <algorithm> // min
|
#include <algorithm> // min
|
||||||
|
#include <atomic>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
#include <condition_variable>
|
#include <condition_variable>
|
||||||
|
@ -49,6 +50,7 @@ struct Region
|
||||||
{
|
{
|
||||||
Region(const std::string& shmId, uint64_t id, uint64_t size, bool remote, RegionCallback callback, RegionBulkCallback bulkCallback, const std::string& path, int flags)
|
Region(const std::string& shmId, uint64_t id, uint64_t size, bool remote, RegionCallback callback, RegionBulkCallback bulkCallback, const std::string& path, int flags)
|
||||||
: fRemote(remote)
|
: fRemote(remote)
|
||||||
|
, fLinger(100)
|
||||||
, fStop(false)
|
, fStop(false)
|
||||||
, fName("fmq_" + shmId + "_rg_" + std::to_string(id))
|
, fName("fmq_" + shmId + "_rg_" + std::to_string(id))
|
||||||
, fQueueName("fmq_" + shmId + "_rgq_" + std::to_string(id))
|
, fQueueName("fmq_" + shmId + "_rgq_" + std::to_string(id))
|
||||||
|
@ -208,6 +210,9 @@ struct Region
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SetLinger(uint32_t linger) { fLinger = linger; }
|
||||||
|
uint32_t GetLinger() const { return fLinger; }
|
||||||
|
|
||||||
~Region()
|
~Region()
|
||||||
{
|
{
|
||||||
fStop = true;
|
fStop = true;
|
||||||
|
@ -244,7 +249,8 @@ struct Region
|
||||||
}
|
}
|
||||||
|
|
||||||
bool fRemote;
|
bool fRemote;
|
||||||
bool fStop;
|
uint32_t fLinger;
|
||||||
|
std::atomic<bool> fStop;
|
||||||
std::string fName;
|
std::string fName;
|
||||||
std::string fQueueName;
|
std::string fQueueName;
|
||||||
boost::interprocess::shared_memory_object fShmemObject;
|
boost::interprocess::shared_memory_object fShmemObject;
|
||||||
|
|
|
@ -57,6 +57,8 @@ class UnmanagedRegion final : public fair::mq::UnmanagedRegion
|
||||||
void* GetData() const override { return fRegion->get_address(); }
|
void* GetData() const override { return fRegion->get_address(); }
|
||||||
size_t GetSize() const override { return fRegion->get_size(); }
|
size_t GetSize() const override { return fRegion->get_size(); }
|
||||||
uint64_t GetId() const override { return fRegionId; }
|
uint64_t GetId() const override { return fRegionId; }
|
||||||
|
void SetLinger(uint32_t linger) override { fManager.GetRegion(fRegionId)->SetLinger(linger); }
|
||||||
|
uint32_t GetLinger() const override { return fManager.GetRegion(fRegionId)->GetLinger(); }
|
||||||
|
|
||||||
~UnmanagedRegion() override { fManager.RemoveRegion(fRegionId); }
|
~UnmanagedRegion() override { fManager.RemoveRegion(fRegionId); }
|
||||||
|
|
||||||
|
|
|
@ -52,6 +52,8 @@ class UnmanagedRegion final : public fair::mq::UnmanagedRegion
|
||||||
virtual size_t GetSize() const override { return fSize; }
|
virtual size_t GetSize() const override { return fSize; }
|
||||||
uint64_t GetId() const override { return fId; }
|
uint64_t GetId() const override { return fId; }
|
||||||
int64_t GetUserFlags() const { return fUserFlags; }
|
int64_t GetUserFlags() const { return fUserFlags; }
|
||||||
|
void SetLinger(uint32_t /* linger */) override { LOG(debug) << "ZeroMQ UnmanagedRegion linger option not implemented. Acknowledgements are local."; }
|
||||||
|
uint32_t GetLinger() const override { LOG(debug) << "ZeroMQ UnmanagedRegion linger option not implemented. Acknowledgements are local."; return 0; }
|
||||||
|
|
||||||
virtual ~UnmanagedRegion()
|
virtual ~UnmanagedRegion()
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue
Block a user