From 3f4e8e33e7a25b076cb9ec00f76e3d70749198a1 Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Tue, 5 Sep 2017 13:40:23 -0500 Subject: [PATCH] use reftrack --- pdbApp/pdb.cpp | 6 +++--- pdbApp/pdb.h | 2 +- pdbApp/pdbgroup.cpp | 12 ++++++------ pdbApp/pdbgroup.h | 4 ++-- pdbApp/pdbsingle.cpp | 41 ++++++++++++++++++++++++++++++++++++----- pdbApp/pdbsingle.h | 18 +++++++++++++----- pdbApp/qsrv.cpp | 8 ++++++++ testApp/testpdb.cpp | 8 ++++---- 8 files changed, 73 insertions(+), 26 deletions(-) diff --git a/pdbApp/pdb.cpp b/pdbApp/pdb.cpp index 694d39f..db6235d 100644 --- a/pdbApp/pdb.cpp +++ b/pdbApp/pdb.cpp @@ -312,7 +312,7 @@ struct PDBProcessor }; } -size_t PDBProvider::ninstances; +size_t PDBProvider::num_instances; PDBProvider::PDBProvider(const epics::pvAccess::Configuration::shared_pointer &) { @@ -442,12 +442,12 @@ PDBProvider::PDBProvider(const epics::pvAccess::Configuration::shared_pointer &) // TODO, remove PV and continue? throw; } - epics::atomic::increment(ninstances); + epics::atomic::increment(num_instances); } PDBProvider::~PDBProvider() { - epics::atomic::decrement(ninstances); + epics::atomic::decrement(num_instances); { epicsGuard G(transient_pv_map.mutex()); diff --git a/pdbApp/pdb.h b/pdbApp/pdb.h index 734ba4f..c3064f9 100644 --- a/pdbApp/pdb.h +++ b/pdbApp/pdb.h @@ -54,7 +54,7 @@ struct epicsShareClass PDBProvider : public epics::pvAccess::ChannelProvider, dbEventCtx event_context; - static size_t ninstances; + static size_t num_instances; }; #endif // PDB_H diff --git a/pdbApp/pdbgroup.cpp b/pdbApp/pdbgroup.cpp index 37b0a87..96449d6 100644 --- a/pdbApp/pdbgroup.cpp +++ b/pdbApp/pdbgroup.cpp @@ -11,7 +11,7 @@ namespace pvd = epics::pvData; namespace pva = epics::pvAccess; -size_t PDBGroupPV::ninstances; +size_t PDBGroupPV::num_instances; typedef epicsGuard Guard; @@ -83,12 +83,12 @@ PDBGroupPV::PDBGroupPV() ,monatomic(false) ,initial_waits(0) { - epics::atomic::increment(ninstances); + epics::atomic::increment(num_instances); } PDBGroupPV::~PDBGroupPV() { - epics::atomic::decrement(ninstances); + epics::atomic::decrement(num_instances); } pva::Channel::shared_pointer @@ -99,7 +99,7 @@ PDBGroupPV::connect(const std::tr1::shared_ptr& prov, return ret; } -size_t PDBGroupChannel::ninstances; +size_t PDBGroupChannel::num_instances; PDBGroupChannel::PDBGroupChannel(const PDBGroupPV::shared_pointer& pv, const std::tr1::shared_ptr& prov, @@ -107,12 +107,12 @@ PDBGroupChannel::PDBGroupChannel(const PDBGroupPV::shared_pointer& pv, :BaseChannel(pv->name, prov, req, pv->fielddesc) ,pv(pv) { - epics::atomic::increment(ninstances); + epics::atomic::increment(num_instances); } PDBGroupChannel::~PDBGroupChannel() { - epics::atomic::decrement(ninstances); + epics::atomic::decrement(num_instances); } void PDBGroupChannel::printInfo(std::ostream& out) diff --git a/pdbApp/pdbgroup.h b/pdbApp/pdbgroup.h index 8aa413d..a8eb4e4 100644 --- a/pdbApp/pdbgroup.h +++ b/pdbApp/pdbgroup.h @@ -56,7 +56,7 @@ struct epicsShareClass PDBGroupPV : public PDBPV interested_t interested; size_t initial_waits; - static size_t ninstances; + static size_t num_instances; PDBGroupPV(); virtual ~PDBGroupPV(); @@ -74,7 +74,7 @@ struct epicsShareClass PDBGroupChannel : public BaseChannel, PDBGroupPV::shared_pointer pv; - static size_t ninstances; + static size_t num_instances; PDBGroupChannel(const PDBGroupPV::shared_pointer& pv, const std::tr1::shared_ptr& prov, diff --git a/pdbApp/pdbsingle.cpp b/pdbApp/pdbsingle.cpp index 823e08f..79b892a 100644 --- a/pdbApp/pdbsingle.cpp +++ b/pdbApp/pdbsingle.cpp @@ -12,7 +12,11 @@ namespace pvd = epics::pvData; namespace pva = epics::pvAccess; -size_t PDBSinglePV::ninstances; +size_t PDBSinglePV::num_instances; +size_t PDBSingleChannel::num_instances; +size_t PDBSingleGet::num_instances; +size_t PDBSinglePut::num_instances; +size_t PDBSingleMonitor::num_instances; typedef epicsGuard Guard; @@ -73,12 +77,12 @@ PDBSinglePV::PDBSinglePV(DBCH& chan, complete = pvd::getPVDataCreate()->createPVStructure(fielddesc); pvif.reset(PVIF::attach(this->chan, complete)); - epics::atomic::increment(ninstances); + epics::atomic::increment(num_instances); } PDBSinglePV::~PDBSinglePV() { - epics::atomic::decrement(ninstances); + epics::atomic::decrement(num_instances); } void PDBSinglePV::activate() @@ -101,6 +105,12 @@ PDBSingleChannel::PDBSingleChannel(const PDBSinglePV::shared_pointer& pv, ,pv(pv) { assert(!!this->pv); + epics::atomic::increment(num_instances); +} + +PDBSingleChannel::~PDBSingleChannel() +{ + epics::atomic::decrement(num_instances); } void PDBSingleChannel::printInfo(std::ostream& out) @@ -149,7 +159,14 @@ PDBSingleGet::PDBSingleGet(const PDBSingleChannel::shared_pointer &channel, ,changed(new pvd::BitSet(channel->fielddesc->getNumberFields())) ,pvf(pvd::getPVDataCreate()->createPVStructure(channel->fielddesc)) ,pvif(PVIF::attach(channel->pv->chan, pvf)) -{} +{ + epics::atomic::increment(num_instances); +} + +PDBSingleGet::~PDBSingleGet() +{ + epics::atomic::decrement(num_instances); +} namespace { void commonGet(PVIF *pvif, pvd::BitSet* changed) @@ -188,6 +205,7 @@ PDBSinglePut::PDBSinglePut(const PDBSingleChannel::shared_pointer &channel, ,doProcForce(false) ,doWait(false) { + epics::atomic::increment(num_instances); dbChannel *chan = channel->pv->chan; dbCommon *precord = dbChannelRecord(chan); doProc = dbChannelField(chan) == &precord->proc || @@ -214,6 +232,11 @@ PDBSinglePut::PDBSinglePut(const PDBSingleChannel::shared_pointer &channel, notify.usrPvt = (void*)this; } +PDBSinglePut::~PDBSinglePut() +{ + epics::atomic::decrement(num_instances); +} + void PDBSinglePut::put(pvd::PVStructure::shared_pointer const & value, pvd::BitSet::shared_pointer const & changed) { @@ -277,7 +300,15 @@ PDBSingleMonitor::PDBSingleMonitor(const PDBSinglePV::shared_pointer& pv, const pvd::PVStructure::shared_pointer& pvReq) :BaseMonitor(requester, pvReq) ,pv(pv) -{} +{ + epics::atomic::increment(num_instances); +} + +PDBSingleMonitor::~PDBSingleMonitor() +{ + destroy(); + epics::atomic::decrement(num_instances); +} void PDBSingleMonitor::destroy() { diff --git a/pdbApp/pdbsingle.h b/pdbApp/pdbsingle.h index 080af41..57b4a88 100644 --- a/pdbApp/pdbsingle.h +++ b/pdbApp/pdbsingle.h @@ -45,7 +45,7 @@ struct epicsShareClass PDBSinglePV : public PDBPV DBEvent evt_VALUE, evt_PROPERTY; bool hadevent_VALUE, hadevent_PROPERTY; - static size_t ninstances; + static size_t num_instances; PDBSinglePV(DBCH& chan, const PDBProvider::shared_pointer& prov); @@ -65,9 +65,11 @@ struct PDBSingleChannel : public BaseChannel, PDBSinglePV::shared_pointer pv; + static size_t num_instances; + PDBSingleChannel(const PDBSinglePV::shared_pointer& pv, const epics::pvAccess::ChannelRequester::shared_pointer& req); - virtual ~PDBSingleChannel() {} + virtual ~PDBSingleChannel(); virtual epics::pvAccess::ChannelGet::shared_pointer createChannelGet( epics::pvAccess::ChannelGetRequester::shared_pointer const & channelGetRequester, @@ -93,10 +95,12 @@ struct PDBSingleGet : public epics::pvAccess::ChannelGet, epics::pvData::PVStructurePtr pvf; std::auto_ptr pvif; + static size_t num_instances; + PDBSingleGet(const PDBSingleChannel::shared_pointer& channel, const epics::pvAccess::ChannelGetRequester::shared_pointer& requester, const epics::pvData::PVStructure::shared_pointer& pvReq); - virtual ~PDBSingleGet() {} + virtual ~PDBSingleGet(); virtual void destroy() { pvif.reset(); channel.reset(); requester.reset(); } virtual void lock() {} @@ -122,10 +126,12 @@ struct PDBSinglePut : public epics::pvAccess::ChannelPut, std::tr1::shared_ptr procself; // make ref. loop while notify is active + static size_t num_instances; + PDBSinglePut(const PDBSingleChannel::shared_pointer& channel, const epics::pvAccess::ChannelPutRequester::shared_pointer& requester, const epics::pvData::PVStructure::shared_pointer& pvReq); - virtual ~PDBSinglePut() {} + virtual ~PDBSinglePut(); virtual void destroy() { pvif.reset(); channel.reset(); requester.reset(); } virtual void lock() {} @@ -145,10 +151,12 @@ struct PDBSingleMonitor : public BaseMonitor PDBSinglePV::weak_pointer pv; + static size_t num_instances; + PDBSingleMonitor(const PDBSinglePV::shared_pointer& pv, const requester_t::shared_pointer& requester, const epics::pvData::PVStructure::shared_pointer& pvReq); - virtual ~PDBSingleMonitor() {destroy();} + virtual ~PDBSingleMonitor(); virtual void onStart(); virtual void onStop(); diff --git a/pdbApp/qsrv.cpp b/pdbApp/qsrv.cpp index 17ce0c5..47eb841 100644 --- a/pdbApp/qsrv.cpp +++ b/pdbApp/qsrv.cpp @@ -4,18 +4,26 @@ #include #include +#include #include #include #include "pvahelper.h" #include "iocshelper.h" #include "pdb.h" +#include "pdbsingle.h" namespace pva = epics::pvAccess; static void QSRVRegistrar() { + epics::registerRefCounter("PDBSinglePV", &PDBSinglePV::num_instances); + epics::registerRefCounter("PDBSingleChannel", &PDBSingleChannel::num_instances); + epics::registerRefCounter("PDBSingleGet", &PDBSingleGet::num_instances); + epics::registerRefCounter("PDBSinglePut", &PDBSinglePut::num_instances); + epics::registerRefCounter("PDBSingleMonitor", &PDBSingleMonitor::num_instances); + epics::registerRefCounter("PDBProvider", &PDBProvider::num_instances); pva::ChannelProviderRegistry::servers()->add("QSRV"); } diff --git a/testApp/testpdb.cpp b/testApp/testpdb.cpp index 84616ed..fcb4cd5 100644 --- a/testApp/testpdb.cpp +++ b/testApp/testpdb.cpp @@ -428,10 +428,10 @@ MAIN(testpdb) iocshCmd("stopPVAServer"); testDiag("check to see that all dbChannel are closed before IOC shuts down"); - testEqual(epics::atomic::get(PDBProvider::ninstances), 0u); - testEqual(epics::atomic::get(PDBGroupChannel::ninstances), 0u); - testEqual(epics::atomic::get(PDBGroupPV::ninstances), 0u); - testEqual(epics::atomic::get(PDBSinglePV::ninstances), 0u); + testEqual(epics::atomic::get(PDBProvider::num_instances), 0u); + testEqual(epics::atomic::get(PDBGroupChannel::num_instances), 0u); + testEqual(epics::atomic::get(PDBGroupPV::num_instances), 0u); + testEqual(epics::atomic::get(PDBSinglePV::num_instances), 0u); }catch(std::exception& e){ PRINT_EXCEPTION(e);