use reftrack
This commit is contained in:
@@ -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<epicsMutex> G(transient_pv_map.mutex());
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
namespace pvd = epics::pvData;
|
||||
namespace pva = epics::pvAccess;
|
||||
|
||||
size_t PDBGroupPV::ninstances;
|
||||
size_t PDBGroupPV::num_instances;
|
||||
|
||||
typedef epicsGuard<epicsMutex> 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<PDBProvider>& prov,
|
||||
return ret;
|
||||
}
|
||||
|
||||
size_t PDBGroupChannel::ninstances;
|
||||
size_t PDBGroupChannel::num_instances;
|
||||
|
||||
PDBGroupChannel::PDBGroupChannel(const PDBGroupPV::shared_pointer& pv,
|
||||
const std::tr1::shared_ptr<pva::ChannelProvider>& 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)
|
||||
|
||||
@@ -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<epics::pvAccess::ChannelProvider>& prov,
|
||||
|
||||
@@ -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()
|
||||
{
|
||||
|
||||
@@ -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> 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<PDBSinglePut> 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();
|
||||
|
||||
@@ -4,18 +4,26 @@
|
||||
#include <epicsExit.h>
|
||||
#include <epicsThread.h>
|
||||
|
||||
#include <pv/reftrack.h>
|
||||
#include <pv/pvAccess.h>
|
||||
#include <pv/serverContext.h>
|
||||
|
||||
#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<PDBProvider>("QSRV");
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user