From de6fcf2bbefd3aa0064237944d94ea8cff419b5f Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Tue, 5 Sep 2017 16:23:05 -0500 Subject: [PATCH] group use reftrack --- pdbApp/pdbgroup.cpp | 21 ++++++++++++++++++--- pdbApp/pdbgroup.h | 8 ++++++-- pdbApp/qsrv.cpp | 8 ++++++++ 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/pdbApp/pdbgroup.cpp b/pdbApp/pdbgroup.cpp index 6315e8a..ca15e21 100644 --- a/pdbApp/pdbgroup.cpp +++ b/pdbApp/pdbgroup.cpp @@ -12,6 +12,9 @@ namespace pvd = epics::pvData; namespace pva = epics::pvAccess; size_t PDBGroupPV::num_instances; +size_t PDBGroupChannel::num_instances; +size_t PDBGroupPut::num_instances; +size_t PDBGroupMonitor::num_instances; typedef epicsGuard Guard; @@ -99,8 +102,6 @@ PDBGroupPV::connect(const std::tr1::shared_ptr& prov, return ret; } -size_t PDBGroupChannel::num_instances; - PDBGroupChannel::PDBGroupChannel(const PDBGroupPV::shared_pointer& pv, const std::tr1::shared_ptr& prov, const pva::ChannelRequester::shared_pointer& req) @@ -153,6 +154,7 @@ PDBGroupPut::PDBGroupPut(const PDBGroupChannel::shared_pointer& channel, ,changed(new pvd::BitSet(channel->fielddesc->getNumberFields())) ,pvf(pvd::getPVDataCreate()->createPVStructure(channel->fielddesc)) { + epics::atomic::increment(num_instances); pvd::PVScalarPtr atomicopt(pvReq->getSubField("record._options.atomic")); if(atomicopt) { try { @@ -177,6 +179,11 @@ PDBGroupPut::PDBGroupPut(const PDBGroupChannel::shared_pointer& channel, } } +PDBGroupPut::~PDBGroupPut() +{ + epics::atomic::decrement(num_instances); +} + void PDBGroupPut::put(pvd::PVStructure::shared_pointer const & value, pvd::BitSet::shared_pointer const & changed) { @@ -245,7 +252,15 @@ PDBGroupMonitor::PDBGroupMonitor(const PDBGroupPV::shared_pointer& pv, const pvd::PVStructure::shared_pointer& pvReq) :BaseMonitor(requester, pvReq) ,pv(pv) -{} +{ + epics::atomic::increment(num_instances); +} + +PDBGroupMonitor::~PDBGroupMonitor() +{ + destroy(); + epics::atomic::decrement(num_instances); +} void PDBGroupMonitor::destroy() { diff --git a/pdbApp/pdbgroup.h b/pdbApp/pdbgroup.h index fcd701c..4fd6a35 100644 --- a/pdbApp/pdbgroup.h +++ b/pdbApp/pdbgroup.h @@ -103,10 +103,12 @@ struct PDBGroupPut : public epics::pvAccess::ChannelPut, epics::pvData::PVStructurePtr pvf; std::vector > pvif; + static size_t num_instances; + PDBGroupPut(const PDBGroupChannel::shared_pointer &channel, const requester_type::weak_pointer &requester, const epics::pvData::PVStructure::shared_pointer& pvReq); - virtual ~PDBGroupPut() {} + virtual ~PDBGroupPut(); virtual void destroy() { pvif.clear(); channel.reset(); requester.reset(); } virtual void lock() {} @@ -128,10 +130,12 @@ struct PDBGroupMonitor : public BaseMonitor bool atomic; + static size_t num_instances; + PDBGroupMonitor(const PDBGroupPV::shared_pointer& pv, const requester_type::weak_pointer& requester, const epics::pvData::PVStructure::shared_pointer& pvReq); - virtual ~PDBGroupMonitor() {destroy();} + virtual ~PDBGroupMonitor(); virtual void onStart(); virtual void onStop(); diff --git a/pdbApp/qsrv.cpp b/pdbApp/qsrv.cpp index d8ad11f..2d7ca0a 100644 --- a/pdbApp/qsrv.cpp +++ b/pdbApp/qsrv.cpp @@ -10,8 +10,10 @@ #include "pvahelper.h" #include "iocshelper.h" +#include "pvif.h" #include "pdb.h" #include "pdbsingle.h" +#include "pdbgroup.h" namespace pva = epics::pvAccess; @@ -22,6 +24,12 @@ void QSRVRegistrar() epics::registerRefCounter("PDBSingleChannel", &PDBSingleChannel::num_instances); epics::registerRefCounter("PDBSinglePut", &PDBSinglePut::num_instances); epics::registerRefCounter("PDBSingleMonitor", &PDBSingleMonitor::num_instances); +#ifdef USE_MULTILOCK + epics::registerRefCounter("PDBGroupPV", &PDBGroupPV::num_instances); + epics::registerRefCounter("PDBGroupChannel", &PDBGroupChannel::num_instances); + epics::registerRefCounter("PDBGroupPut", &PDBGroupPut::num_instances); + epics::registerRefCounter("PDBGroupMonitor", &PDBGroupMonitor::num_instances); +#endif // USE_MULTILOCK epics::registerRefCounter("PDBProvider", &PDBProvider::num_instances); pva::ChannelProviderRegistry::servers()->add("QSRV"); }