eliminate seperate mutex for BaseMonitor
This commit is contained in:
@ -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)
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
Reference in New Issue
Block a user