diff --git a/pdbApp/pdbgroup.cpp b/pdbApp/pdbgroup.cpp index 7ef3be1..d7519a7 100644 --- a/pdbApp/pdbgroup.cpp +++ b/pdbApp/pdbgroup.cpp @@ -98,12 +98,21 @@ PDBGroupPV::connect(const std::tr1::shared_ptr& prov, return ret; } +size_t PDBGroupChannel::ninstances; + PDBGroupChannel::PDBGroupChannel(const PDBGroupPV::shared_pointer& pv, const std::tr1::shared_ptr& prov, const pva::ChannelRequester::shared_pointer& req) :BaseChannel(pv->name, prov, req, pv->fielddesc) ,pv(pv) -{} +{ + epics::atomic::increment(ninstances); +} + +PDBGroupChannel::~PDBGroupChannel() +{ + epics::atomic::decrement(ninstances); +} void PDBGroupChannel::printInfo(std::ostream& out) { diff --git a/pdbApp/pdbgroup.h b/pdbApp/pdbgroup.h index e00c229..4570622 100644 --- a/pdbApp/pdbgroup.h +++ b/pdbApp/pdbgroup.h @@ -72,10 +72,12 @@ struct PDBGroupChannel : public BaseChannel, PDBGroupPV::shared_pointer pv; + static size_t ninstances; + PDBGroupChannel(const PDBGroupPV::shared_pointer& pv, const std::tr1::shared_ptr& prov, const epics::pvAccess::ChannelRequester::shared_pointer& req); - virtual ~PDBGroupChannel() {} + virtual ~PDBGroupChannel(); virtual epics::pvAccess::ChannelGet::shared_pointer createChannelGet( epics::pvAccess::ChannelGetRequester::shared_pointer const & channelGetRequester, diff --git a/testApp/testpdb.cpp b/testApp/testpdb.cpp index 6b6f48e..b759fd2 100644 --- a/testApp/testpdb.cpp +++ b/testApp/testpdb.cpp @@ -431,7 +431,7 @@ void p2pTestIoc_registerRecordDeviceDriver(struct dbBase *); MAIN(testpdb) { - testPlan(138); + testPlan(139); try{ TestIOC IOC; @@ -461,6 +461,7 @@ MAIN(testpdb) prov.reset(); testDiag("check to see that all dbChannel are closed before IOC shuts down"); + testEqual(epics::atomic::get(PDBGroupChannel::ninstances), 0u); testEqual(epics::atomic::get(PDBGroupPV::ninstances), 0u); testEqual(epics::atomic::get(PDBSinglePV::ninstances), 0u);