pdb: single monitor hold strong ref to PV

ensure sequenced shutdown when subscription closed.
This commit is contained in:
Michael Davidsaver
2017-11-13 11:14:01 -06:00
parent e472e552a0
commit c8644494f0
2 changed files with 8 additions and 14 deletions

View File

@ -156,10 +156,11 @@ void PDBSinglePV::addMonitor(PDBSingleMonitor* mon)
needpost = true;
} // else new subscriber, but no initial update. so just wait
if(interested_iterating)
if(interested_iterating) {
interested_add.insert(mon);
else
} else {
interested.insert(mon);
}
}
if(needpost)
mon->post();
@ -444,25 +445,18 @@ void PDBSingleMonitor::destroy()
void PDBSingleMonitor::onStart()
{
PDBSinglePV::shared_pointer PV(pv.lock());
if(!PV) return;
PV->addMonitor(this);
pv->addMonitor(this);
}
void PDBSingleMonitor::onStop()
{
PDBSinglePV::shared_pointer PV(pv.lock());
if(PV) return;
guard_t G(PV->lock);
guard_t G(pv->lock);
PV->removeMonitor(this);
pv->removeMonitor(this);
}
void PDBSingleMonitor::requestUpdate()
{
PDBSinglePV::shared_pointer PV(pv.lock());
if(PV) return;
guard_t G(PV->lock);
guard_t G(pv->lock);
post();
}

View File

@ -136,7 +136,7 @@ struct PDBSingleMonitor : public BaseMonitor
{
POINTER_DEFINITIONS(PDBSingleMonitor);
const PDBSinglePV::weak_pointer pv;
const PDBSinglePV::shared_pointer pv;
static size_t num_instances;