use reftrack

This commit is contained in:
Michael Davidsaver
2017-09-05 13:40:23 -05:00
parent bf3fda4e92
commit 3f4e8e33e7
8 changed files with 73 additions and 26 deletions
+36 -5
View File
@@ -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<epicsMutex> 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()
{