eliminate seperate mutex for BaseMonitor

This commit is contained in:
Michael Davidsaver
2018-02-06 17:47:51 -08:00
parent 6e77fc85b6
commit 1635e75c86
3 changed files with 9 additions and 5 deletions

View File

@ -74,7 +74,7 @@ struct BaseMonitor : public epics::pvAccess::Monitor
typedef epics::pvAccess::MonitorRequester requester_t;
mutable epicsMutex lock; // not held during any callback
epicsMutex& lock; // not held during any callback
typedef epicsGuard<epicsMutex> guard_t;
private:
@ -90,9 +90,11 @@ private:
buffer_t inuse, empty;
public:
BaseMonitor(const requester_t::weak_pointer& requester,
BaseMonitor(epicsMutex& lock,
const requester_t::weak_pointer& requester,
const epics::pvData::PVStructure::shared_pointer& pvReq)
:requester(requester)
:lock(lock)
,requester(requester)
,inoverflow(false)
,running(false)
,nbuffers(2)

View File

@ -416,7 +416,7 @@ void PDBGroupPut::get()
PDBGroupMonitor::PDBGroupMonitor(const PDBGroupPV::shared_pointer& pv,
const epics::pvAccess::MonitorRequester::weak_pointer &requester,
const pvd::PVStructure::shared_pointer& pvReq)
:BaseMonitor(requester, pvReq)
:BaseMonitor(pv->lock, requester, pvReq)
,pv(pv)
{
epics::atomic::increment(num_instances);

View File

@ -55,6 +55,7 @@ void pdb_single_event(void *user_arg, struct dbChannel *chan,
self->scratch.clear();
{
DBScanLocker L(dbChannelRecord(self->chan));
// dbGet() into self->complete
self->pvif->put(self->scratch, evt->dbe_mask, pfl);
}
@ -63,6 +64,7 @@ void pdb_single_event(void *user_arg, struct dbChannel *chan,
FOREACH(PDBSinglePV::interested_t::const_iterator, it, end, self->interested) {
PDBSingleMonitor& mon = **it;
// from self->complete into monitor queue element
mon.post(self->scratch);
}
@ -433,7 +435,7 @@ void PDBSinglePut::get()
PDBSingleMonitor::PDBSingleMonitor(const PDBSinglePV::shared_pointer& pv,
const requester_t::shared_pointer& requester,
const pvd::PVStructure::shared_pointer& pvReq)
:BaseMonitor(requester, pvReq)
:BaseMonitor(pv->lock, requester, pvReq)
,pv(pv)
{
epics::atomic::increment(num_instances);