From 74f9fd27185a04425ce53cb39f5e4bc0e6819663 Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Fri, 17 Nov 2017 15:07:13 -0600 Subject: [PATCH] testpdb debugging --- pdbApp/pdb.h | 3 +++ pdbApp/qsrv.cpp | 9 +++++++-- testApp/testpdb.cpp | 22 ++++++++++++++++++++-- 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/pdbApp/pdb.h b/pdbApp/pdb.h index 4fa4f5f..0ecb931 100644 --- a/pdbApp/pdb.h +++ b/pdbApp/pdb.h @@ -57,4 +57,7 @@ struct epicsShareClass PDBProvider : public epics::pvAccess::ChannelProvider, static size_t num_instances; }; +epicsShareFunc +void QSRVRegistrar_counters(); + #endif // PDB_H diff --git a/pdbApp/qsrv.cpp b/pdbApp/qsrv.cpp index 8b87327..ee35ee0 100644 --- a/pdbApp/qsrv.cpp +++ b/pdbApp/qsrv.cpp @@ -28,8 +28,7 @@ namespace pva = epics::pvAccess; -static -void QSRVRegistrar() +void QSRVRegistrar_counters() { epics::registerRefCounter("PDBSinglePV", &PDBSinglePV::num_instances); epics::registerRefCounter("PDBSingleChannel", &PDBSingleChannel::num_instances); @@ -42,6 +41,12 @@ void QSRVRegistrar() epics::registerRefCounter("PDBGroupMonitor", &PDBGroupMonitor::num_instances); #endif // USE_MULTILOCK epics::registerRefCounter("PDBProvider", &PDBProvider::num_instances); +} + +static +void QSRVRegistrar() +{ + QSRVRegistrar_counters(); pva::ChannelProviderRegistry::servers()->addSingleton("QSRV"); } diff --git a/testApp/testpdb.cpp b/testApp/testpdb.cpp index 60f14b7..ec789a4 100644 --- a/testApp/testpdb.cpp +++ b/testApp/testpdb.cpp @@ -6,6 +6,7 @@ #include #include +#include #include #include "utilities.h" @@ -298,8 +299,17 @@ void p2pTestIoc_registerRecordDeviceDriver(struct dbBase *); MAIN(testpdb) { - testPlan(92); + testPlan(93); try{ + QSRVRegistrar_counters(); + epics::RefSnapshot ref_before; + ref_before.update(); + + testDiag("Refs before"); + for(epics::RefSnapshot::iterator it(ref_before.begin()), end(ref_before.end()); it!=end; ++it) { + testDiag("Cnt %s = %zu (%ld)", it->first.c_str(), it->second.current, it->second.delta); + } + TestIOC IOC; testdbReadDatabase("p2pTestIoc.dbd", NULL, NULL); @@ -323,12 +333,20 @@ MAIN(testpdb) testSingleMonitor(client); testGroupMonitor(client); testGroupMonitorTriggers(client); + + testEqual(epics::atomic::get(PDBProvider::num_instances), 1u); } testOk1(prov.unique()); prov.reset(); - iocshCmd("stopPVAServer"); + testDiag("Refs after"); + epics::RefSnapshot ref_after; + ref_after.update(); + epics::RefSnapshot ref_diff = ref_after - ref_before; + for(epics::RefSnapshot::iterator it(ref_diff.begin()), end(ref_diff.end()); it!=end; ++it) { + testDiag("Cnt %s = %zu (%ld)", it->first.c_str(), it->second.current, it->second.delta); + } testDiag("check to see that all dbChannel are closed before IOC shuts down"); testEqual(epics::atomic::get(PDBProvider::num_instances), 0u);