use newer API
This commit is contained in:
@ -117,7 +117,7 @@ MonitorCacheEntry::monitorEvent(pvd::MonitorPtr const & monitor)
|
|||||||
|
|
||||||
shared_pointer self(weakref); // keeps us alive in case all MonitorUsers are destroy()ed
|
shared_pointer self(weakref); // keeps us alive in case all MonitorUsers are destroy()ed
|
||||||
|
|
||||||
pvd::MonitorElementPtr update;
|
pva::MonitorElementPtr update;
|
||||||
|
|
||||||
typedef std::vector<MonitorUser::shared_pointer> dsnotify_t;
|
typedef std::vector<MonitorUser::shared_pointer> dsnotify_t;
|
||||||
dsnotify_t dsnotify;
|
dsnotify_t dsnotify;
|
||||||
@ -306,8 +306,8 @@ MonitorUser::start()
|
|||||||
if(lval && !empty.empty()) {
|
if(lval && !empty.empty()) {
|
||||||
//already running, notify of initial element
|
//already running, notify of initial element
|
||||||
|
|
||||||
pvd::MonitorElementPtr elem(empty.front());
|
const pva::MonitorElementPtr& elem(empty.front());
|
||||||
elem->pvStructurePtr = lval;
|
elem->pvStructurePtr->copy(*lval);
|
||||||
elem->changedBitSet->set(0); // indicate all changed
|
elem->changedBitSet->set(0); // indicate all changed
|
||||||
elem->overrunBitSet->clear();
|
elem->overrunBitSet->clear();
|
||||||
filled.push_back(elem);
|
filled.push_back(elem);
|
||||||
@ -330,11 +330,11 @@ MonitorUser::stop()
|
|||||||
return pvd::Status::Ok;
|
return pvd::Status::Ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
pvd::MonitorElementPtr
|
pva::MonitorElementPtr
|
||||||
MonitorUser::poll()
|
MonitorUser::poll()
|
||||||
{
|
{
|
||||||
Guard G(mutex());
|
Guard G(mutex());
|
||||||
pvd::MonitorElementPtr ret;
|
pva::MonitorElementPtr ret;
|
||||||
if(!filled.empty()) {
|
if(!filled.empty()) {
|
||||||
ret = filled.front();
|
ret = filled.front();
|
||||||
inuse.insert(ret); // track which ones are out for client use
|
inuse.insert(ret); // track which ones are out for client use
|
||||||
@ -345,7 +345,7 @@ MonitorUser::poll()
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
MonitorUser::release(pvd::MonitorElementPtr const & monitorElement)
|
MonitorUser::release(pva::MonitorElementPtr const & monitorElement)
|
||||||
{
|
{
|
||||||
Guard G(mutex());
|
Guard G(mutex());
|
||||||
//TODO: ifdef DEBUG? (only track inuse when debugging?)
|
//TODO: ifdef DEBUG? (only track inuse when debugging?)
|
||||||
|
@ -449,6 +449,7 @@ PDBProvider::PDBProvider()
|
|||||||
PDBProvider::~PDBProvider()
|
PDBProvider::~PDBProvider()
|
||||||
{
|
{
|
||||||
epics::atomic::decrement(ninstances);
|
epics::atomic::decrement(ninstances);
|
||||||
|
std::cerr<<"########## "<<__PRETTY_FUNCTION__<<"\n";
|
||||||
{
|
{
|
||||||
epicsGuard<epicsMutex> G(transient_pv_map.mutex());
|
epicsGuard<epicsMutex> G(transient_pv_map.mutex());
|
||||||
if(event_context) {
|
if(event_context) {
|
||||||
@ -464,6 +465,7 @@ PDBProvider::~PDBProvider()
|
|||||||
void PDBProvider::destroy()
|
void PDBProvider::destroy()
|
||||||
{
|
{
|
||||||
dbEventCtx ctxt = NULL;
|
dbEventCtx ctxt = NULL;
|
||||||
|
std::cerr<<"########## "<<__PRETTY_FUNCTION__<<"\n";
|
||||||
persist_pv_map_t ppv;
|
persist_pv_map_t ppv;
|
||||||
{
|
{
|
||||||
epicsGuard<epicsMutex> G(transient_pv_map.mutex());
|
epicsGuard<epicsMutex> G(transient_pv_map.mutex());
|
||||||
@ -530,6 +532,7 @@ PDBProvider::createChannel(std::string const & channelName,
|
|||||||
pva::Channel::shared_pointer ret;
|
pva::Channel::shared_pointer ret;
|
||||||
PDBPV::shared_pointer pv;
|
PDBPV::shared_pointer pv;
|
||||||
pvd::Status status;
|
pvd::Status status;
|
||||||
|
std::cerr<<"######## "<<__PRETTY_FUNCTION__<<" name"<<channelName<<"\n";
|
||||||
{
|
{
|
||||||
epicsGuard<epicsMutex> G(transient_pv_map.mutex());
|
epicsGuard<epicsMutex> G(transient_pv_map.mutex());
|
||||||
|
|
||||||
|
@ -84,7 +84,7 @@ struct TestMonitor {
|
|||||||
upstream->dispatch(); // trigger monitorEvent() from upstream to gateway
|
upstream->dispatch(); // trigger monitorEvent() from upstream to gateway
|
||||||
|
|
||||||
testOk1(mreq->eventCnt==1);
|
testOk1(mreq->eventCnt==1);
|
||||||
pvd::MonitorElementPtr elem(mon->poll());
|
pva::MonitorElementPtr elem(mon->poll());
|
||||||
testOk1(!!elem.get());
|
testOk1(!!elem.get());
|
||||||
if(!!elem.get()) testEqual(toString(*elem->changedBitSet), "{0}");
|
if(!!elem.get()) testEqual(toString(*elem->changedBitSet), "{0}");
|
||||||
else testFail("oops");
|
else testFail("oops");
|
||||||
@ -122,8 +122,8 @@ struct TestMonitor {
|
|||||||
testOk1(mreq->eventCnt==1);
|
testOk1(mreq->eventCnt==1);
|
||||||
testOk1(mreq2->eventCnt==1);
|
testOk1(mreq2->eventCnt==1);
|
||||||
|
|
||||||
pvd::MonitorElementPtr elem(mon->poll());
|
pva::MonitorElementPtr elem(mon->poll());
|
||||||
pvd::MonitorElementPtr elem2(mon2->poll());
|
pva::MonitorElementPtr elem2(mon2->poll());
|
||||||
testOk1(!!elem.get());
|
testOk1(!!elem.get());
|
||||||
testOk1(!!elem2.get());
|
testOk1(!!elem2.get());
|
||||||
testOk1(elem!=elem2);
|
testOk1(elem!=elem2);
|
||||||
@ -210,7 +210,7 @@ struct TestMonitor {
|
|||||||
testOk1(mreq->eventCnt==1);
|
testOk1(mreq->eventCnt==1);
|
||||||
|
|
||||||
testDiag("poll initial update");
|
testDiag("poll initial update");
|
||||||
pvd::MonitorElementPtr elem(mon->poll());
|
pva::MonitorElementPtr elem(mon->poll());
|
||||||
testOk1(!!elem.get());
|
testOk1(!!elem.get());
|
||||||
if(elem) mon->release(elem);
|
if(elem) mon->release(elem);
|
||||||
|
|
||||||
@ -284,7 +284,7 @@ struct TestMonitor {
|
|||||||
testOk1(mreq->eventCnt==1);
|
testOk1(mreq->eventCnt==1);
|
||||||
|
|
||||||
testDiag("poll initial update");
|
testDiag("poll initial update");
|
||||||
pvd::MonitorElementPtr elem(mon->poll());
|
pva::MonitorElementPtr elem(mon->poll());
|
||||||
testOk1(!!elem.get());
|
testOk1(!!elem.get());
|
||||||
if(elem) mon->release(elem);
|
if(elem) mon->release(elem);
|
||||||
|
|
||||||
|
@ -108,30 +108,6 @@ struct PVMonitor : public PVConnect
|
|||||||
mon->destroy();
|
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(); }
|
pva::MonitorElementPtr poll() { return mon->poll(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -278,18 +254,15 @@ void testSingleMonitor(const PDBProvider::shared_pointer& prov)
|
|||||||
testOk1(mon.monreq->waitForEvent());
|
testOk1(mon.monreq->waitForEvent());
|
||||||
testDiag("Initial event");
|
testDiag("Initial event");
|
||||||
|
|
||||||
PVMonitor::Element e(mon);
|
pva::MonitorElement::Ref e(mon.mon);
|
||||||
|
|
||||||
e = mon.poll();
|
|
||||||
|
|
||||||
testOk1(!!e);
|
testOk1(!!e);
|
||||||
testOk1(!!e && e.elem->changedBitSet->get(0));
|
testOk1(!!e && e->changedBitSet->get(0));
|
||||||
testFieldEqual<pvd::PVDouble>(e, "value", 1.0);
|
testFieldEqual<pvd::PVDouble>(e->pvStructurePtr, "value", 1.0);
|
||||||
testFieldEqual<pvd::PVDouble>(e, "display.limitHigh", 100.0);
|
testFieldEqual<pvd::PVDouble>(e->pvStructurePtr, "display.limitHigh", 100.0);
|
||||||
testFieldEqual<pvd::PVDouble>(e, "display.limitLow", -100.0);
|
testFieldEqual<pvd::PVDouble>(e->pvStructurePtr, "display.limitLow", -100.0);
|
||||||
|
|
||||||
e = mon.poll();
|
testOk1(!e.next());
|
||||||
testOk1(!e);
|
|
||||||
|
|
||||||
testDiag("trigger new VALUE event");
|
testDiag("trigger new VALUE event");
|
||||||
testdbPutFieldOk("rec1", DBR_DOUBLE, 11.0);
|
testdbPutFieldOk("rec1", DBR_DOUBLE, 11.0);
|
||||||
@ -297,14 +270,12 @@ void testSingleMonitor(const PDBProvider::shared_pointer& prov)
|
|||||||
testDiag("Wait for event");
|
testDiag("Wait for event");
|
||||||
mon.monreq->waitForEvent();
|
mon.monreq->waitForEvent();
|
||||||
|
|
||||||
e = mon.poll();
|
testOk1(!!e.next());
|
||||||
testOk1(!!e);
|
if(!!e) testEqual(toString(*e->changedBitSet), "{1, 3, 4, 7, 8}");
|
||||||
if(!!e) testEqual(toString(*e.elem->changedBitSet), "{1, 3, 4, 7, 8}");
|
|
||||||
else testFail("oops");
|
else testFail("oops");
|
||||||
testFieldEqual<pvd::PVDouble>(e, "value", 11.0);
|
testFieldEqual<pvd::PVDouble>(e->pvStructurePtr, "value", 11.0);
|
||||||
|
|
||||||
e = mon.poll();
|
testOk1(!e.next());
|
||||||
testOk1(!e);
|
|
||||||
|
|
||||||
testDiag("trigger new PROPERTY event");
|
testDiag("trigger new PROPERTY event");
|
||||||
testdbPutFieldOk("rec1.HOPR", DBR_DOUBLE, 50.0);
|
testdbPutFieldOk("rec1.HOPR", DBR_DOUBLE, 50.0);
|
||||||
@ -312,14 +283,12 @@ void testSingleMonitor(const PDBProvider::shared_pointer& prov)
|
|||||||
testDiag("Wait for event");
|
testDiag("Wait for event");
|
||||||
mon.monreq->waitForEvent();
|
mon.monreq->waitForEvent();
|
||||||
|
|
||||||
e = mon.poll();
|
testOk1(!!e.next());
|
||||||
testOk1(!!e);
|
if(!!e) testEqual(toString(*e->changedBitSet), "{7, 8, 11, 12, 15, 17, 18}");
|
||||||
if(!!e) testEqual(toString(*e.elem->changedBitSet), "{7, 8, 11, 12, 15, 17, 18}");
|
|
||||||
else testFail("oops");
|
else testFail("oops");
|
||||||
testFieldEqual<pvd::PVDouble>(e, "display.limitHigh", 50.0);
|
testFieldEqual<pvd::PVDouble>(e->pvStructurePtr, "display.limitHigh", 50.0);
|
||||||
|
|
||||||
e = mon.poll();
|
testOk1(!e.next());
|
||||||
testOk1(!e);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void testGroupMonitor(const PDBProvider::shared_pointer& prov)
|
void testGroupMonitor(const PDBProvider::shared_pointer& prov)
|
||||||
@ -333,7 +302,7 @@ void testGroupMonitor(const PDBProvider::shared_pointer& prov)
|
|||||||
|
|
||||||
testDiag("subscribe to grp1");
|
testDiag("subscribe to grp1");
|
||||||
PVMonitor mon(prov, "grp1");
|
PVMonitor mon(prov, "grp1");
|
||||||
PVMonitor::Element e(mon);
|
pva::MonitorElement::Ref e(mon.mon);
|
||||||
|
|
||||||
testOk1(mon.mon->start().isOK());
|
testOk1(mon.mon->start().isOK());
|
||||||
|
|
||||||
@ -341,21 +310,19 @@ void testGroupMonitor(const PDBProvider::shared_pointer& prov)
|
|||||||
testOk1(mon.monreq->waitForEvent());
|
testOk1(mon.monreq->waitForEvent());
|
||||||
testDiag("Initial event");
|
testDiag("Initial event");
|
||||||
|
|
||||||
e = mon.poll();
|
testOk1(!!e.next());
|
||||||
testOk1(!!e);
|
|
||||||
|
|
||||||
testOk1(!!e && e.elem->changedBitSet->get(0));
|
testOk1(!!e && e->changedBitSet->get(0));
|
||||||
testFieldEqual<pvd::PVDouble>(e, "fld1.value", 3.0);
|
testFieldEqual<pvd::PVDouble>(e->pvStructurePtr, "fld1.value", 3.0);
|
||||||
testFieldEqual<pvd::PVInt>(e, "fld2.value", 30);
|
testFieldEqual<pvd::PVInt>(e->pvStructurePtr, "fld2.value", 30);
|
||||||
testFieldEqual<pvd::PVDouble>(e, "fld3.value", 4.0);
|
testFieldEqual<pvd::PVDouble>(e->pvStructurePtr, "fld3.value", 4.0);
|
||||||
testFieldEqual<pvd::PVInt>(e, "fld4.value", 40);
|
testFieldEqual<pvd::PVInt>(e->pvStructurePtr, "fld4.value", 40);
|
||||||
testFieldEqual<pvd::PVDouble>(e, "fld1.display.limitHigh", 200.0);
|
testFieldEqual<pvd::PVDouble>(e->pvStructurePtr, "fld1.display.limitHigh", 200.0);
|
||||||
testFieldEqual<pvd::PVDouble>(e, "fld1.display.limitLow", -200.0);
|
testFieldEqual<pvd::PVDouble>(e->pvStructurePtr, "fld1.display.limitLow", -200.0);
|
||||||
testFieldEqual<pvd::PVDouble>(e, "fld2.display.limitHigh", 2147483647.0);
|
testFieldEqual<pvd::PVDouble>(e->pvStructurePtr, "fld2.display.limitHigh", 2147483647.0);
|
||||||
testFieldEqual<pvd::PVDouble>(e, "fld2.display.limitLow", -2147483648.0);
|
testFieldEqual<pvd::PVDouble>(e->pvStructurePtr, "fld2.display.limitLow", -2147483648.0);
|
||||||
|
|
||||||
e = mon.poll();
|
testOk1(!e.next());
|
||||||
testOk1(!e);
|
|
||||||
|
|
||||||
testdbPutFieldOk("rec3", DBR_DOUBLE, 32.0);
|
testdbPutFieldOk("rec3", DBR_DOUBLE, 32.0);
|
||||||
|
|
||||||
@ -363,13 +330,12 @@ void testGroupMonitor(const PDBProvider::shared_pointer& prov)
|
|||||||
testOk1(mon.monreq->waitForEvent());
|
testOk1(mon.monreq->waitForEvent());
|
||||||
testDiag("event");
|
testDiag("event");
|
||||||
|
|
||||||
e = mon.poll();
|
testOk1(!!e.next());
|
||||||
testOk1(!!e);
|
testOk1(!!e && e->pvStructurePtr->getSubFieldT("fld1.value")->getFieldOffset()==6);
|
||||||
testOk1(!!e && e.elem->pvStructurePtr->getSubFieldT("fld1.value")->getFieldOffset()==6);
|
if(!!e) testEqual(toString(*e->changedBitSet), "{6, 8, 9, 12, 13}");
|
||||||
if(!!e) testEqual(toString(*e.elem->changedBitSet), "{6, 8, 9, 12, 13}");
|
|
||||||
else testFail("oops");
|
else testFail("oops");
|
||||||
|
|
||||||
testFieldEqual<pvd::PVDouble>(e, "fld1.value", 32.0);
|
testFieldEqual<pvd::PVDouble>(e->pvStructurePtr, "fld1.value", 32.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void testGroupMonitorTriggers(const PDBProvider::shared_pointer& prov)
|
void testGroupMonitorTriggers(const PDBProvider::shared_pointer& prov)
|
||||||
@ -382,7 +348,7 @@ void testGroupMonitorTriggers(const PDBProvider::shared_pointer& prov)
|
|||||||
|
|
||||||
testDiag("subscribe to grp2");
|
testDiag("subscribe to grp2");
|
||||||
PVMonitor mon(prov, "grp2");
|
PVMonitor mon(prov, "grp2");
|
||||||
PVMonitor::Element e(mon);
|
pva::MonitorElement::Ref e(mon.mon);
|
||||||
|
|
||||||
testOk1(mon.mon->start().isOK());
|
testOk1(mon.mon->start().isOK());
|
||||||
|
|
||||||
@ -390,17 +356,15 @@ void testGroupMonitorTriggers(const PDBProvider::shared_pointer& prov)
|
|||||||
testOk1(mon.monreq->waitForEvent());
|
testOk1(mon.monreq->waitForEvent());
|
||||||
testDiag("Initial event");
|
testDiag("Initial event");
|
||||||
|
|
||||||
e = mon.poll();
|
testOk1(!!e.next());
|
||||||
testOk1(!!e);
|
|
||||||
|
|
||||||
testOk1(!!e && e.elem->changedBitSet->get(0));
|
testOk1(!!e && e->changedBitSet->get(0));
|
||||||
|
|
||||||
testFieldEqual<pvd::PVDouble>(e, "fld1.value", 5.0);
|
testFieldEqual<pvd::PVDouble>(e->pvStructurePtr, "fld1.value", 5.0);
|
||||||
testFieldEqual<pvd::PVDouble>(e, "fld2.value", 6.0);
|
testFieldEqual<pvd::PVDouble>(e->pvStructurePtr, "fld2.value", 6.0);
|
||||||
testFieldEqual<pvd::PVInt>(e, "fld3.value", 0); // not triggered -> no update. only get/set
|
testFieldEqual<pvd::PVInt>(e->pvStructurePtr, "fld3.value", 0); // not triggered -> no update. only get/set
|
||||||
|
|
||||||
e = mon.poll();
|
testOk1(!e.next());
|
||||||
testOk1(!e);
|
|
||||||
|
|
||||||
testdbPutFieldOk("rec5.RVAL", DBR_LONG, 60); // no trigger -> no event
|
testdbPutFieldOk("rec5.RVAL", DBR_LONG, 60); // no trigger -> no event
|
||||||
testdbPutFieldOk("rec5", DBR_DOUBLE, 15.0); // 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());
|
testOk1(mon.monreq->waitForEvent());
|
||||||
testDiag("event");
|
testDiag("event");
|
||||||
|
|
||||||
e = mon.poll();
|
testOk1(!!e.next());
|
||||||
testOk1(!!e);
|
|
||||||
|
|
||||||
testOk1(!!e && e.elem->pvStructurePtr->getSubFieldT("fld1.value")->getFieldOffset()==6);
|
testOk1(!!e && e->pvStructurePtr->getSubFieldT("fld1.value")->getFieldOffset()==6);
|
||||||
testOk1(!!e && e.elem->pvStructurePtr->getSubFieldT("fld2.value")->getFieldOffset()==46);
|
testOk1(!!e && e->pvStructurePtr->getSubFieldT("fld2.value")->getFieldOffset()==46);
|
||||||
if(!!e) testEqual(toString(*e.elem->changedBitSet), "{6, 8, 9, 12, 13, 46, 48, 49, 52, 53}");
|
if(!!e) testEqual(toString(*e->changedBitSet), "{6, 8, 9, 12, 13, 46, 48, 49, 52, 53}");
|
||||||
else testFail("oops");
|
else testFail("oops");
|
||||||
|
|
||||||
testFieldEqual<pvd::PVDouble>(e, "fld1.value", 15.0);
|
testFieldEqual<pvd::PVDouble>(e->pvStructurePtr, "fld1.value", 15.0);
|
||||||
testFieldEqual<pvd::PVDouble>(e, "fld2.value", 16.0);
|
testFieldEqual<pvd::PVDouble>(e->pvStructurePtr, "fld2.value", 16.0);
|
||||||
testFieldEqual<pvd::PVInt>(e, "fld3.value", 0); // not triggered -> no update. only get/set
|
testFieldEqual<pvd::PVInt>(e->pvStructurePtr, "fld3.value", 0); // not triggered -> no update. only get/set
|
||||||
|
|
||||||
e = mon.poll();
|
testOk1(!e.next());
|
||||||
testOk1(!e);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
@ -72,7 +72,7 @@ void testmonitor()
|
|||||||
testDiag("Start monitor and check initial update");
|
testDiag("Start monitor and check initial update");
|
||||||
testOk1(mon->start().isSuccess());
|
testOk1(mon->start().isSuccess());
|
||||||
|
|
||||||
pvd::MonitorElementPtr elem(mon->poll());
|
pva::MonitorElementPtr elem(mon->poll());
|
||||||
testOk1(!!elem.get());
|
testOk1(!!elem.get());
|
||||||
|
|
||||||
if(elem) testDiag("elem changed '%s' overflow '%s'", toString(*elem->changedBitSet).c_str(), toString(*elem->overrunBitSet).c_str());
|
if(elem) testDiag("elem changed '%s' overflow '%s'", toString(*elem->changedBitSet).c_str(), toString(*elem->overrunBitSet).c_str());
|
||||||
|
@ -271,7 +271,7 @@ TestPVMonitor::TestPVMonitor(const TestPVChannel::shared_pointer& ch,
|
|||||||
{
|
{
|
||||||
pvd::PVDataCreatePtr fact(pvd::PVDataCreate::getPVDataCreate());
|
pvd::PVDataCreatePtr fact(pvd::PVDataCreate::getPVDataCreate());
|
||||||
for(size_t i=0; i<bsize; i++) {
|
for(size_t i=0; i<bsize; i++) {
|
||||||
pvd::MonitorElementPtr elem(new pvd::MonitorElement(fact->createPVStructure(channel->pv->dtype)));
|
pva::MonitorElementPtr elem(new pvd::MonitorElement(fact->createPVStructure(channel->pv->dtype)));
|
||||||
free.push_back(elem);
|
free.push_back(elem);
|
||||||
}
|
}
|
||||||
overflow.reset(new pvd::MonitorElement(fact->createPVStructure(channel->pv->dtype)));
|
overflow.reset(new pvd::MonitorElement(fact->createPVStructure(channel->pv->dtype)));
|
||||||
@ -317,7 +317,7 @@ pvd::Status TestPVMonitor::start()
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(!this->free.empty()) {
|
if(!this->free.empty()) {
|
||||||
pvd::MonitorElementPtr monitorElement(this->free.front());
|
pva::MonitorElementPtr monitorElement(this->free.front());
|
||||||
|
|
||||||
if(overflow->changedBitSet->isEmpty()) {
|
if(overflow->changedBitSet->isEmpty()) {
|
||||||
overflow->changedBitSet->set(0); // initial update has all changed
|
overflow->changedBitSet->set(0); // initial update has all changed
|
||||||
@ -352,9 +352,9 @@ pvd::Status TestPVMonitor::stop()
|
|||||||
return pvd::Status();
|
return pvd::Status();
|
||||||
}
|
}
|
||||||
|
|
||||||
pvd::MonitorElementPtr TestPVMonitor::poll()
|
pva::MonitorElementPtr TestPVMonitor::poll()
|
||||||
{
|
{
|
||||||
pvd::MonitorElementPtr ret;
|
pva::MonitorElementPtr ret;
|
||||||
Guard G(channel->pv->provider->lock);
|
Guard G(channel->pv->provider->lock);
|
||||||
if(!buffer.empty()) {
|
if(!buffer.empty()) {
|
||||||
ret = buffer.front();
|
ret = buffer.front();
|
||||||
@ -367,7 +367,7 @@ pvd::MonitorElementPtr TestPVMonitor::poll()
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestPVMonitor::release(pvd::MonitorElementPtr const & monitorElement)
|
void TestPVMonitor::release(pva::MonitorElementPtr const & monitorElement)
|
||||||
{
|
{
|
||||||
Guard G(channel->pv->provider->lock);
|
Guard G(channel->pv->provider->lock);
|
||||||
testDiag("TestPVMonitor::release %p %p", this, monitorElement.get());
|
testDiag("TestPVMonitor::release %p %p", this, monitorElement.get());
|
||||||
|
Reference in New Issue
Block a user