From 51f54809969faf42e3febf6451666995d05caec7 Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Thu, 29 Jun 2017 11:36:35 +0200 Subject: [PATCH] use newer API --- p2pApp/moncache.cpp | 12 ++-- pdbApp/pdb.cpp | 3 + testApp/testmon.cpp | 10 ++-- testApp/testpdb.cpp | 128 +++++++++++++++--------------------------- testApp/testtest.cpp | 2 +- testApp/utilities.cpp | 10 ++-- 6 files changed, 65 insertions(+), 100 deletions(-) diff --git a/p2pApp/moncache.cpp b/p2pApp/moncache.cpp index 44178ff..8e76272 100644 --- a/p2pApp/moncache.cpp +++ b/p2pApp/moncache.cpp @@ -117,7 +117,7 @@ MonitorCacheEntry::monitorEvent(pvd::MonitorPtr const & monitor) shared_pointer self(weakref); // keeps us alive in case all MonitorUsers are destroy()ed - pvd::MonitorElementPtr update; + pva::MonitorElementPtr update; typedef std::vector dsnotify_t; dsnotify_t dsnotify; @@ -306,8 +306,8 @@ MonitorUser::start() if(lval && !empty.empty()) { //already running, notify of initial element - pvd::MonitorElementPtr elem(empty.front()); - elem->pvStructurePtr = lval; + const pva::MonitorElementPtr& elem(empty.front()); + elem->pvStructurePtr->copy(*lval); elem->changedBitSet->set(0); // indicate all changed elem->overrunBitSet->clear(); filled.push_back(elem); @@ -330,11 +330,11 @@ MonitorUser::stop() return pvd::Status::Ok; } -pvd::MonitorElementPtr +pva::MonitorElementPtr MonitorUser::poll() { Guard G(mutex()); - pvd::MonitorElementPtr ret; + pva::MonitorElementPtr ret; if(!filled.empty()) { ret = filled.front(); inuse.insert(ret); // track which ones are out for client use @@ -345,7 +345,7 @@ MonitorUser::poll() } void -MonitorUser::release(pvd::MonitorElementPtr const & monitorElement) +MonitorUser::release(pva::MonitorElementPtr const & monitorElement) { Guard G(mutex()); //TODO: ifdef DEBUG? (only track inuse when debugging?) diff --git a/pdbApp/pdb.cpp b/pdbApp/pdb.cpp index 6f43427..f97ca80 100644 --- a/pdbApp/pdb.cpp +++ b/pdbApp/pdb.cpp @@ -449,6 +449,7 @@ PDBProvider::PDBProvider() PDBProvider::~PDBProvider() { epics::atomic::decrement(ninstances); + std::cerr<<"########## "<<__PRETTY_FUNCTION__<<"\n"; { epicsGuard G(transient_pv_map.mutex()); if(event_context) { @@ -464,6 +465,7 @@ PDBProvider::~PDBProvider() void PDBProvider::destroy() { dbEventCtx ctxt = NULL; + std::cerr<<"########## "<<__PRETTY_FUNCTION__<<"\n"; persist_pv_map_t ppv; { epicsGuard G(transient_pv_map.mutex()); @@ -530,6 +532,7 @@ PDBProvider::createChannel(std::string const & channelName, pva::Channel::shared_pointer ret; PDBPV::shared_pointer pv; pvd::Status status; + std::cerr<<"######## "<<__PRETTY_FUNCTION__<<" name"< G(transient_pv_map.mutex()); diff --git a/testApp/testmon.cpp b/testApp/testmon.cpp index e7c8362..7162549 100644 --- a/testApp/testmon.cpp +++ b/testApp/testmon.cpp @@ -84,7 +84,7 @@ struct TestMonitor { upstream->dispatch(); // trigger monitorEvent() from upstream to gateway testOk1(mreq->eventCnt==1); - pvd::MonitorElementPtr elem(mon->poll()); + pva::MonitorElementPtr elem(mon->poll()); testOk1(!!elem.get()); if(!!elem.get()) testEqual(toString(*elem->changedBitSet), "{0}"); else testFail("oops"); @@ -122,8 +122,8 @@ struct TestMonitor { testOk1(mreq->eventCnt==1); testOk1(mreq2->eventCnt==1); - pvd::MonitorElementPtr elem(mon->poll()); - pvd::MonitorElementPtr elem2(mon2->poll()); + pva::MonitorElementPtr elem(mon->poll()); + pva::MonitorElementPtr elem2(mon2->poll()); testOk1(!!elem.get()); testOk1(!!elem2.get()); testOk1(elem!=elem2); @@ -210,7 +210,7 @@ struct TestMonitor { testOk1(mreq->eventCnt==1); testDiag("poll initial update"); - pvd::MonitorElementPtr elem(mon->poll()); + pva::MonitorElementPtr elem(mon->poll()); testOk1(!!elem.get()); if(elem) mon->release(elem); @@ -284,7 +284,7 @@ struct TestMonitor { testOk1(mreq->eventCnt==1); testDiag("poll initial update"); - pvd::MonitorElementPtr elem(mon->poll()); + pva::MonitorElementPtr elem(mon->poll()); testOk1(!!elem.get()); if(elem) mon->release(elem); diff --git a/testApp/testpdb.cpp b/testApp/testpdb.cpp index 345116c..a901da9 100644 --- a/testApp/testpdb.cpp +++ b/testApp/testpdb.cpp @@ -108,30 +108,6 @@ struct PVMonitor : public PVConnect mon->destroy(); } - struct Element { - pva::MonitorElementPtr elem; - pva::Monitor::shared_pointer mon; - - Element(const PVMonitor& m) : mon(m.mon) {} - ~Element() { - if(elem) mon->release(elem); - } - Element& operator=(const pva::MonitorElementPtr& e) { - if(elem) mon->release(elem); - elem = e; - return *this; - } - - pvd::BitSet& changed() { return *elem->changedBitSet; } - pvd::BitSet& overflow() { return *elem->overrunBitSet; } - pvd::PVStructure* operator->() { return elem->pvStructurePtr.get(); } - operator pvd::PVStructurePtr&() { return elem->pvStructurePtr; } - bool operator!() const { return !elem; } - private: - Element(const Element& e); - Element& operator=(const Element& e); - }; - pva::MonitorElementPtr poll() { return mon->poll(); } }; @@ -278,18 +254,15 @@ void testSingleMonitor(const PDBProvider::shared_pointer& prov) testOk1(mon.monreq->waitForEvent()); testDiag("Initial event"); - PVMonitor::Element e(mon); - - e = mon.poll(); + pva::MonitorElement::Ref e(mon.mon); testOk1(!!e); - testOk1(!!e && e.elem->changedBitSet->get(0)); - testFieldEqual(e, "value", 1.0); - testFieldEqual(e, "display.limitHigh", 100.0); - testFieldEqual(e, "display.limitLow", -100.0); + testOk1(!!e && e->changedBitSet->get(0)); + testFieldEqual(e->pvStructurePtr, "value", 1.0); + testFieldEqual(e->pvStructurePtr, "display.limitHigh", 100.0); + testFieldEqual(e->pvStructurePtr, "display.limitLow", -100.0); - e = mon.poll(); - testOk1(!e); + testOk1(!e.next()); testDiag("trigger new VALUE event"); testdbPutFieldOk("rec1", DBR_DOUBLE, 11.0); @@ -297,14 +270,12 @@ void testSingleMonitor(const PDBProvider::shared_pointer& prov) testDiag("Wait for event"); mon.monreq->waitForEvent(); - e = mon.poll(); - testOk1(!!e); - if(!!e) testEqual(toString(*e.elem->changedBitSet), "{1, 3, 4, 7, 8}"); + testOk1(!!e.next()); + if(!!e) testEqual(toString(*e->changedBitSet), "{1, 3, 4, 7, 8}"); else testFail("oops"); - testFieldEqual(e, "value", 11.0); + testFieldEqual(e->pvStructurePtr, "value", 11.0); - e = mon.poll(); - testOk1(!e); + testOk1(!e.next()); testDiag("trigger new PROPERTY event"); testdbPutFieldOk("rec1.HOPR", DBR_DOUBLE, 50.0); @@ -312,14 +283,12 @@ void testSingleMonitor(const PDBProvider::shared_pointer& prov) testDiag("Wait for event"); mon.monreq->waitForEvent(); - e = mon.poll(); - testOk1(!!e); - if(!!e) testEqual(toString(*e.elem->changedBitSet), "{7, 8, 11, 12, 15, 17, 18}"); + testOk1(!!e.next()); + if(!!e) testEqual(toString(*e->changedBitSet), "{7, 8, 11, 12, 15, 17, 18}"); else testFail("oops"); - testFieldEqual(e, "display.limitHigh", 50.0); + testFieldEqual(e->pvStructurePtr, "display.limitHigh", 50.0); - e = mon.poll(); - testOk1(!e); + testOk1(!e.next()); } void testGroupMonitor(const PDBProvider::shared_pointer& prov) @@ -333,7 +302,7 @@ void testGroupMonitor(const PDBProvider::shared_pointer& prov) testDiag("subscribe to grp1"); PVMonitor mon(prov, "grp1"); - PVMonitor::Element e(mon); + pva::MonitorElement::Ref e(mon.mon); testOk1(mon.mon->start().isOK()); @@ -341,21 +310,19 @@ void testGroupMonitor(const PDBProvider::shared_pointer& prov) testOk1(mon.monreq->waitForEvent()); testDiag("Initial event"); - e = mon.poll(); - testOk1(!!e); + testOk1(!!e.next()); - testOk1(!!e && e.elem->changedBitSet->get(0)); - testFieldEqual(e, "fld1.value", 3.0); - testFieldEqual(e, "fld2.value", 30); - testFieldEqual(e, "fld3.value", 4.0); - testFieldEqual(e, "fld4.value", 40); - testFieldEqual(e, "fld1.display.limitHigh", 200.0); - testFieldEqual(e, "fld1.display.limitLow", -200.0); - testFieldEqual(e, "fld2.display.limitHigh", 2147483647.0); - testFieldEqual(e, "fld2.display.limitLow", -2147483648.0); + testOk1(!!e && e->changedBitSet->get(0)); + testFieldEqual(e->pvStructurePtr, "fld1.value", 3.0); + testFieldEqual(e->pvStructurePtr, "fld2.value", 30); + testFieldEqual(e->pvStructurePtr, "fld3.value", 4.0); + testFieldEqual(e->pvStructurePtr, "fld4.value", 40); + testFieldEqual(e->pvStructurePtr, "fld1.display.limitHigh", 200.0); + testFieldEqual(e->pvStructurePtr, "fld1.display.limitLow", -200.0); + testFieldEqual(e->pvStructurePtr, "fld2.display.limitHigh", 2147483647.0); + testFieldEqual(e->pvStructurePtr, "fld2.display.limitLow", -2147483648.0); - e = mon.poll(); - testOk1(!e); + testOk1(!e.next()); testdbPutFieldOk("rec3", DBR_DOUBLE, 32.0); @@ -363,13 +330,12 @@ void testGroupMonitor(const PDBProvider::shared_pointer& prov) testOk1(mon.monreq->waitForEvent()); testDiag("event"); - e = mon.poll(); - testOk1(!!e); - testOk1(!!e && e.elem->pvStructurePtr->getSubFieldT("fld1.value")->getFieldOffset()==6); - if(!!e) testEqual(toString(*e.elem->changedBitSet), "{6, 8, 9, 12, 13}"); + testOk1(!!e.next()); + testOk1(!!e && e->pvStructurePtr->getSubFieldT("fld1.value")->getFieldOffset()==6); + if(!!e) testEqual(toString(*e->changedBitSet), "{6, 8, 9, 12, 13}"); else testFail("oops"); - testFieldEqual(e, "fld1.value", 32.0); + testFieldEqual(e->pvStructurePtr, "fld1.value", 32.0); } void testGroupMonitorTriggers(const PDBProvider::shared_pointer& prov) @@ -382,7 +348,7 @@ void testGroupMonitorTriggers(const PDBProvider::shared_pointer& prov) testDiag("subscribe to grp2"); PVMonitor mon(prov, "grp2"); - PVMonitor::Element e(mon); + pva::MonitorElement::Ref e(mon.mon); testOk1(mon.mon->start().isOK()); @@ -390,17 +356,15 @@ void testGroupMonitorTriggers(const PDBProvider::shared_pointer& prov) testOk1(mon.monreq->waitForEvent()); testDiag("Initial event"); - e = mon.poll(); - testOk1(!!e); + testOk1(!!e.next()); - testOk1(!!e && e.elem->changedBitSet->get(0)); + testOk1(!!e && e->changedBitSet->get(0)); - testFieldEqual(e, "fld1.value", 5.0); - testFieldEqual(e, "fld2.value", 6.0); - testFieldEqual(e, "fld3.value", 0); // not triggered -> no update. only get/set + testFieldEqual(e->pvStructurePtr, "fld1.value", 5.0); + testFieldEqual(e->pvStructurePtr, "fld2.value", 6.0); + testFieldEqual(e->pvStructurePtr, "fld3.value", 0); // not triggered -> no update. only get/set - e = mon.poll(); - testOk1(!e); + testOk1(!e.next()); testdbPutFieldOk("rec5.RVAL", DBR_LONG, 60); // no trigger -> no event testdbPutFieldOk("rec5", DBR_DOUBLE, 15.0); // no trigger -> no event @@ -410,20 +374,18 @@ void testGroupMonitorTriggers(const PDBProvider::shared_pointer& prov) testOk1(mon.monreq->waitForEvent()); testDiag("event"); - e = mon.poll(); - testOk1(!!e); + testOk1(!!e.next()); - testOk1(!!e && e.elem->pvStructurePtr->getSubFieldT("fld1.value")->getFieldOffset()==6); - testOk1(!!e && e.elem->pvStructurePtr->getSubFieldT("fld2.value")->getFieldOffset()==46); - if(!!e) testEqual(toString(*e.elem->changedBitSet), "{6, 8, 9, 12, 13, 46, 48, 49, 52, 53}"); + testOk1(!!e && e->pvStructurePtr->getSubFieldT("fld1.value")->getFieldOffset()==6); + testOk1(!!e && e->pvStructurePtr->getSubFieldT("fld2.value")->getFieldOffset()==46); + if(!!e) testEqual(toString(*e->changedBitSet), "{6, 8, 9, 12, 13, 46, 48, 49, 52, 53}"); else testFail("oops"); - testFieldEqual(e, "fld1.value", 15.0); - testFieldEqual(e, "fld2.value", 16.0); - testFieldEqual(e, "fld3.value", 0); // not triggered -> no update. only get/set + testFieldEqual(e->pvStructurePtr, "fld1.value", 15.0); + testFieldEqual(e->pvStructurePtr, "fld2.value", 16.0); + testFieldEqual(e->pvStructurePtr, "fld3.value", 0); // not triggered -> no update. only get/set - e = mon.poll(); - testOk1(!e); + testOk1(!e.next()); } } // namespace diff --git a/testApp/testtest.cpp b/testApp/testtest.cpp index 68e9020..b6bdd97 100644 --- a/testApp/testtest.cpp +++ b/testApp/testtest.cpp @@ -72,7 +72,7 @@ void testmonitor() testDiag("Start monitor and check initial update"); testOk1(mon->start().isSuccess()); - pvd::MonitorElementPtr elem(mon->poll()); + pva::MonitorElementPtr elem(mon->poll()); testOk1(!!elem.get()); if(elem) testDiag("elem changed '%s' overflow '%s'", toString(*elem->changedBitSet).c_str(), toString(*elem->overrunBitSet).c_str()); diff --git a/testApp/utilities.cpp b/testApp/utilities.cpp index 8217e76..715e6d2 100644 --- a/testApp/utilities.cpp +++ b/testApp/utilities.cpp @@ -271,7 +271,7 @@ TestPVMonitor::TestPVMonitor(const TestPVChannel::shared_pointer& ch, { pvd::PVDataCreatePtr fact(pvd::PVDataCreate::getPVDataCreate()); for(size_t i=0; icreatePVStructure(channel->pv->dtype))); + pva::MonitorElementPtr elem(new pvd::MonitorElement(fact->createPVStructure(channel->pv->dtype))); free.push_back(elem); } overflow.reset(new pvd::MonitorElement(fact->createPVStructure(channel->pv->dtype))); @@ -317,7 +317,7 @@ pvd::Status TestPVMonitor::start() } if(!this->free.empty()) { - pvd::MonitorElementPtr monitorElement(this->free.front()); + pva::MonitorElementPtr monitorElement(this->free.front()); if(overflow->changedBitSet->isEmpty()) { overflow->changedBitSet->set(0); // initial update has all changed @@ -352,9 +352,9 @@ pvd::Status TestPVMonitor::stop() return pvd::Status(); } -pvd::MonitorElementPtr TestPVMonitor::poll() +pva::MonitorElementPtr TestPVMonitor::poll() { - pvd::MonitorElementPtr ret; + pva::MonitorElementPtr ret; Guard G(channel->pv->provider->lock); if(!buffer.empty()) { ret = buffer.front(); @@ -367,7 +367,7 @@ pvd::MonitorElementPtr TestPVMonitor::poll() return ret; } -void TestPVMonitor::release(pvd::MonitorElementPtr const & monitorElement) +void TestPVMonitor::release(pva::MonitorElementPtr const & monitorElement) { Guard G(channel->pv->provider->lock); testDiag("TestPVMonitor::release %p %p", this, monitorElement.get());