work on RAII and memory leaks

This commit is contained in:
mrkraimer
2016-06-01 10:10:00 -04:00
parent 1eea87efc7
commit e025e542ea
15 changed files with 701 additions and 287 deletions

View File

@@ -39,6 +39,7 @@ PVDatabase::PVDatabase()
PVDatabase::~PVDatabase()
{
destroy();
}
void PVDatabase::destroy()
@@ -54,7 +55,9 @@ void PVDatabase::destroy()
if(iter==recordMap.end()) break;
PVRecordPtr pvRecord = (*iter).second;
recordMap.erase(iter);
if(pvRecord.get()!=NULL) pvRecord->destroy();
if(pvRecord) {
pvRecord->destroy();
}
}
}

View File

@@ -28,7 +28,6 @@ PVRecordPtr PVRecord::create(
{
PVRecordPtr pvRecord(new PVRecord(recordName,pvStructure));
if(!pvRecord->init()) {
pvRecord->destroy();
pvRecord.reset();
}
return pvRecord;
@@ -52,13 +51,14 @@ PVRecord::~PVRecord()
if(traceLevel>1) {
cout << "~PVRecord() " << recordName << endl;
}
destroy();
}
void PVRecord::initPVRecord()
{
PVRecordStructurePtr parent;
pvRecordStructure = PVRecordStructurePtr(
new PVRecordStructure(pvStructure,parent,getPtrSelf()));
new PVRecordStructure(pvStructure,parent,shared_from_this()));
pvRecordStructure->init();
PVFieldPtr pvField = pvStructure->getSubField("timeStamp");
if(pvField) pvTimeStamp.attach(pvField);
@@ -76,31 +76,26 @@ void PVRecord::destroy()
isDestroyed = true;
pvTimeStamp.detach();
std::list<PVRecordClientWPtr>::iterator clientIter;
while(true) {
clientIter = pvRecordClientList.begin();
if(clientIter==pvRecordClientList.end()) break;
PVRecordClientPtr client = clientIter->lock();
if(client.get()) {
for(std::list<PVRecordClientWPtr>::iterator iter = pvRecordClientList.begin();
iter!=pvRecordClientList.end();
iter++ )
{
PVRecordClientPtr client = iter->lock();
if(client) {
epicsGuardRelease<epics::pvData::Mutex> unguard(guard);
client->detach(getPtrSelf());
client->detach(shared_from_this());
}
pvRecordClientList.erase(clientIter);
}
std::list<PVListenerWPtr>::iterator listenerIter;
while(true) {
listenerIter = pvListenerList.begin();
if(listenerIter==pvListenerList.end()) break;
PVListenerPtr listener = listenerIter->lock();
if(listener.get()) {
for(std::list<PVListenerWPtr>::iterator iter = pvListenerList.begin();
iter!=pvListenerList.end();
iter++ )
{
PVListenerPtr listener = iter->lock();
if(listener) {
epicsGuardRelease<epics::pvData::Mutex> unguard(guard);
listener->unlisten(getPtrSelf());
listener->unlisten(shared_from_this());
}
pvListenerList.erase(listenerIter);
}
pvRecordStructure->destroy();
pvRecordStructure.reset();
pvStructure.reset();
}
void PVRecord::process()
@@ -188,7 +183,7 @@ void PVRecord::lockOtherRecord(PVRecordPtr const & otherRecord)
bool PVRecord::addPVRecordClient(PVRecordClientPtr const & pvRecordClient)
{
if(traceLevel>2) {
if(traceLevel>1) {
cout << "PVRecord::addPVRecordClient() " << recordName << endl;
}
epicsGuard<epics::pvData::Mutex> guard(mutex);
@@ -212,7 +207,7 @@ bool PVRecord::addPVRecordClient(PVRecordClientPtr const & pvRecordClient)
bool PVRecord::removePVRecordClient(PVRecordClientPtr const & pvRecordClient)
{
if(traceLevel>2) {
if(traceLevel>1) {
cout << "PVRecord::removePVRecordClient() " << recordName << endl;
}
epicsGuard<epics::pvData::Mutex> guard(mutex);
@@ -251,7 +246,7 @@ void PVRecord::detachClients()
PVRecordClientPtr client = iter->lock();
if(!client.get()) continue;
epicsGuardRelease <epics::pvData::Mutex> unguard(guard);
client->detach(getPtrSelf());
client->detach(shared_from_this());
}
pvRecordClientList.clear();
}
@@ -279,7 +274,7 @@ bool PVRecord::addListener(
pvListenerList.push_back(pvListener);
this->pvListener = pvListener;
isAddListener = true;
pvCopy->traverseMaster(getPtrSelf());
pvCopy->traverseMaster(shared_from_this());
this->pvListener = PVListenerPtr();;
return true;
}
@@ -316,7 +311,7 @@ bool PVRecord::removeListener(
pvListenerList.erase(iter);
this->pvListener = pvListener;
isAddListener = false;
pvCopy->traverseMaster(getPtrSelf());
pvCopy->traverseMaster(shared_from_this());
this->pvListener = PVListenerPtr();
return true;
}
@@ -335,7 +330,7 @@ void PVRecord::beginGroupPut()
{
PVListenerPtr listener = iter->lock();
if(!listener.get()) continue;
listener->beginGroupPut(getPtrSelf());
listener->beginGroupPut(shared_from_this());
}
}
@@ -350,7 +345,7 @@ void PVRecord::endGroupPut()
{
PVListenerPtr listener = iter->lock();
if(!listener.get()) continue;
listener->endGroupPut(getPtrSelf());
listener->endGroupPut(shared_from_this());
}
}
@@ -377,8 +372,8 @@ PVRecordField::PVRecordField(
void PVRecordField::init()
{
fullFieldName = pvField->getFieldName();
PVRecordStructurePtr pvParent = parent;
fullFieldName = pvField.lock()->getFieldName();
PVRecordStructurePtr pvParent(parent.lock());
while(pvParent) {
string parentName = pvParent->getPVField()->getFieldName();
if(parentName.size()>0) {
@@ -387,39 +382,32 @@ void PVRecordField::init()
}
pvParent = pvParent->getParent();
}
PVRecordPtr pvRecord(this->pvRecord.lock());
if(fullFieldName.size()>0) {
fullName = pvRecord->getRecordName() + '.' + fullFieldName;
} else {
fullName = pvRecord->getRecordName();
}
pvField->setPostHandler(getPtrSelf());
pvField.lock()->setPostHandler(shared_from_this());
}
PVRecordField::~PVRecordField()
PVRecordStructurePtr PVRecordField::getParent()
{
return parent.lock();
}
void PVRecordField::destroy()
{
pvRecord.reset();
parent.reset();
pvField.reset();
pvListenerList.clear();
}
PVRecordStructurePtr PVRecordField::getParent() {return parent;}
PVFieldPtr PVRecordField::getPVField() {return pvField;}
PVFieldPtr PVRecordField::getPVField() {return pvField.lock();}
string PVRecordField::getFullFieldName() {return fullFieldName; }
string PVRecordField::getFullName() {return fullName; }
PVRecordPtr PVRecordField::getPVRecord() {return pvRecord;}
PVRecordPtr PVRecordField::getPVRecord() {return pvRecord.lock();}
bool PVRecordField::addListener(PVListenerPtr const & pvListener)
{
if(pvRecord->getTraceLevel()>1) {
PVRecordPtr pvRecord(this->pvRecord.lock());
if(pvRecord && pvRecord->getTraceLevel()>1) {
cout << "PVRecordField::addListener() " << getFullName() << endl;
}
std::list<PVListenerWPtr>::iterator iter;
@@ -436,7 +424,8 @@ bool PVRecordField::addListener(PVListenerPtr const & pvListener)
void PVRecordField::removeListener(PVListenerPtr const & pvListener)
{
if(pvRecord->getTraceLevel()>1) {
PVRecordPtr pvRecord(this->pvRecord.lock());
if(pvRecord && pvRecord->getTraceLevel()>1) {
cout << "PVRecordField::removeListener() " << getFullName() << endl;
}
std::list<PVListenerWPtr>::iterator iter;
@@ -452,15 +441,16 @@ void PVRecordField::removeListener(PVListenerPtr const & pvListener)
void PVRecordField::postPut()
{
PVRecordStructurePtr parent(this->parent.lock());;
if(parent) {
parent->postParent(getPtrSelf());
parent->postParent(shared_from_this());
}
postSubField();
}
void PVRecordField::postParent(PVRecordFieldPtr const & subField)
{
PVRecordStructurePtr pvrs = static_pointer_cast<PVRecordStructure>(getPtrSelf());
PVRecordStructurePtr pvrs = static_pointer_cast<PVRecordStructure>(shared_from_this());
std::list<PVListenerWPtr>::iterator iter;
for(iter = pvListenerList.begin(); iter != pvListenerList.end(); ++iter)
{
@@ -468,6 +458,7 @@ void PVRecordField::postParent(PVRecordFieldPtr const & subField)
if(!listener.get()) continue;
listener->dataPut(pvrs,subField);
}
PVRecordStructurePtr parent(this->parent.lock());
if(parent) parent->postParent(subField);
}
@@ -475,7 +466,7 @@ void PVRecordField::postSubField()
{
callListener();
if(isStructure) {
PVRecordStructurePtr pvrs = static_pointer_cast<PVRecordStructure>(getPtrSelf());
PVRecordStructurePtr pvrs = static_pointer_cast<PVRecordStructure>(shared_from_this());
PVRecordFieldPtrArrayPtr pvRecordFields = pvrs->getPVRecordFields();
PVRecordFieldPtrArray::iterator iter;
for(iter = pvRecordFields->begin() ; iter !=pvRecordFields->end(); iter++) {
@@ -490,7 +481,7 @@ void PVRecordField::callListener()
for (iter = pvListenerList.begin(); iter!=pvListenerList.end(); iter++ ) {
PVListenerPtr listener = iter->lock();
if(!listener.get()) continue;
listener->dataPut(getPtrSelf());
listener->dataPut(shared_from_this());
}
}
@@ -505,30 +496,14 @@ PVRecordStructure::PVRecordStructure(
{
}
PVRecordStructure::~PVRecordStructure()
{
}
void PVRecordStructure::destroy()
{
PVRecordFieldPtrArray::iterator iter;
PVRecordField::destroy();
for(iter = pvRecordFields->begin() ; iter !=pvRecordFields->end(); iter++) {
(*iter)->destroy();
}
PVRecordField::destroy();
pvRecordFields.reset();
pvStructure.reset();
}
void PVRecordStructure::init()
{
PVRecordField::init();
const PVFieldPtrArray & pvFields = pvStructure->getPVFields();
const PVFieldPtrArray & pvFields = pvStructure.lock()->getPVFields();
size_t numFields = pvFields.size();
pvRecordFields->reserve( numFields);
PVRecordStructurePtr self =
static_pointer_cast<PVRecordStructure>(getPtrSelf());
static_pointer_cast<PVRecordStructure>(shared_from_this());
PVRecordPtr pvRecord = getPVRecord();
for(size_t i=0; i<numFields; i++) {
PVFieldPtr pvField = pvFields[i];
@@ -552,7 +527,7 @@ PVRecordFieldPtrArrayPtr PVRecordStructure::getPVRecordFields()
return pvRecordFields;
}
PVStructurePtr PVRecordStructure::getPVStructure() {return pvStructure;}
PVStructurePtr PVRecordStructure::getPVStructure() {return pvStructure.lock();}
void PVRecordStructure::removeListener(PVListenerPtr const & pvListener)
{

View File

@@ -37,6 +37,7 @@ namespace epics { namespace pvDatabase {
class PVRecord;
typedef std::tr1::shared_ptr<PVRecord> PVRecordPtr;
typedef std::tr1::weak_ptr<PVRecord> PVRecordWPtr;
typedef std::map<std::string,PVRecordPtr> PVRecordMap;
class PVRecordField;
@@ -46,6 +47,7 @@ typedef std::tr1::shared_ptr<PVRecordFieldPtrArray> PVRecordFieldPtrArrayPtr;
class PVRecordStructure;
typedef std::tr1::shared_ptr<PVRecordStructure> PVRecordStructurePtr;
typedef std::tr1::weak_ptr<PVRecordStructure> PVRecordStructureWPtr;
class PVRecordClient;
typedef std::tr1::shared_ptr<PVRecordClient> PVRecordClientPtr;
@@ -69,7 +71,10 @@ class epicsShareClass PVRecord :
{
public:
POINTER_DEFINITIONS(PVRecord);
/**
* The Destructor.
*/
virtual ~PVRecord();
/**
* Virtual initialization method.
* Must be implemented by derived classes.
@@ -87,17 +92,19 @@ public:
* It is the method that makes a record smart.
* If it encounters errors it should raise alarms and/or
* call the <b>message</b> method provided by the base class.
* If the pvStructure has a top level timeStamp,
* the base class sets the timeStamp to the current time.
*/
virtual void process();
/**
* Destroy the PVRecord. Release any resources used and
* get rid of listeners and requesters.
* If derived class overrides this then it must call PVRecord::destroy()
* after it has destroyed rewsorces it uses.
* after it has destroyed any resorces it uses.
*/
virtual void destroy();
/**
* Creates a <b>dump</b> record, i.e. a record where process does nothing.
* Creates a <b>soft</b> record.
* @param recordName The name of the record, which is also the channelName.
* @param pvStructure The top level structure.
* @return A shared pointer to the newly created record.
@@ -105,17 +112,13 @@ public:
static PVRecordPtr create(
std::string const & recordName,
epics::pvData::PVStructurePtr const & pvStructure);
/**
* The Destructor. Must be virtual.
*/
virtual ~PVRecord();
/**
* Get the name of the record.
* @return The name.
*/
std::string getRecordName() const;
/**
* Get the top level PVStructure.
* Get the top level PVRecordStructure.
* @return The shared pointer.
*/
PVRecordStructurePtr getPVRecordStructure() const;
@@ -217,7 +220,7 @@ public:
*/
int getTraceLevel() {return traceLevel;}
/**
* set trace level (0,1) means (lifetime,process)
* set trace level (0,1,2) means (nothing,lifetime,process)
* @param level The level
*/
void setTraceLevel(int level) {traceLevel = level;}
@@ -239,6 +242,9 @@ protected:
* @return The shared pointer to the top level PVStructure.
*/
epics::pvData::PVStructurePtr getPVStructure();
/** Get shared pointer to self
* @return The shared pointer.
*/
PVRecordPtr getPtrSelf()
{
return shared_from_this();
@@ -293,11 +299,7 @@ public:
/**
* Destructor.
*/
virtual ~PVRecordField();
/**
* Release any resources used
*/
virtual void destroy();
virtual ~PVRecordField() {}
/**
* Get the parent.
* @return The parent.
@@ -329,10 +331,6 @@ public:
*/
virtual void postPut();
protected:
PVRecordFieldPtr getPtrSelf()
{
return shared_from_this();
}
virtual void init();
virtual void postParent(PVRecordFieldPtr const & subField);
virtual void postSubField();
@@ -342,10 +340,10 @@ private:
void callListener();
std::list<PVListenerWPtr> pvListenerList;
epics::pvData::PVFieldPtr pvField;
epics::pvData::PVField::weak_pointer pvField;
bool isStructure;
PVRecordStructurePtr parent;
PVRecordPtr pvRecord;
PVRecordStructureWPtr parent;
PVRecordWPtr pvRecord;
std::string fullName;
std::string fullFieldName;
friend class PVRecordStructure;
@@ -374,11 +372,7 @@ public:
/**
* Destructor.
*/
virtual ~PVRecordStructure();
/**
* Release any resources used
*/
virtual void destroy();
virtual ~PVRecordStructure() {}
/**
* Get the sub fields.
* @return the array of PVRecordFieldPtr.
@@ -400,8 +394,7 @@ protected:
virtual void init();
private:
virtual void removeListener(PVListenerPtr const & pvListener);
epics::pvData::PVStructurePtr pvStructure;
epics::pvData::PVStructure::weak_pointer pvStructure;
PVRecordFieldPtrArrayPtr pvRecordFields;
friend class PVRecord;
};
@@ -501,13 +494,13 @@ public:
PVRecordPtr findRecord(std::string const& recordName);
/**
* Add a record.
* @param The record to add.
* @param record The record to add.
* @return <b>true</b> if record was added.
*/
bool addRecord(PVRecordPtr const & record);
/**
* Remove a record.
* @param The record to remove.
* @param record The record to remove.
* @return <b>true</b> if record was removed.
*/
bool removeRecord(PVRecordPtr const & record);

View File

@@ -79,7 +79,7 @@ static bool getProcess(PVStructurePtr pvRequest,bool processDefault)
return pvString->get().compare("true")==0 ? true : false;
} else if(scalar->getScalarType()==pvBoolean) {
PVBooleanPtr pvBoolean = static_pointer_cast<PVBoolean>(pvField);
return pvBoolean.get();
return pvBoolean->get();
}
return processDefault;
}
@@ -194,7 +194,7 @@ void ChannelProcessLocal::destroy()
void ChannelProcessLocal::process()
{
ChannelProcessRequester::shared_pointer requester = channelProcessRequester.lock();
if(!requester.get()) return;
if(!requester) return;
if(isDestroyed) {
requester->processDone(channelDestroyedStatus,getPtrSelf());
return;
@@ -342,7 +342,7 @@ void ChannelGetLocal::destroy()
void ChannelGetLocal::get()
{
ChannelGetRequester::shared_pointer requester = channelGetRequester.lock();
if(!requester.get()) return;
if(!requester) return;
if(isDestroyed) {
requester->getDone(
channelDestroyedStatus,getPtrSelf(),nullPVStructure,nullBitSet);
@@ -494,7 +494,7 @@ void ChannelPutLocal::destroy()
void ChannelPutLocal::get()
{
ChannelPutRequester::shared_pointer requester = channelPutRequester.lock();
if(!requester.get()) return;
if(!requester) return;
if(isDestroyed) {
requester->getDone(
channelDestroyedStatus,getPtrSelf(),nullPVStructure,nullBitSet);
@@ -527,7 +527,7 @@ void ChannelPutLocal::put(
PVStructurePtr const &pvStructure,BitSetPtr const &bitSet)
{
ChannelPutRequester::shared_pointer requester = channelPutRequester.lock();
if(!requester.get()) return;
if(!requester) return;
if(isDestroyed) {
requester->putDone(channelDestroyedStatus,getPtrSelf());
return;
@@ -690,7 +690,7 @@ void ChannelPutGetLocal::putGet(
PVStructurePtr const &pvPutStructure,BitSetPtr const &putBitSet)
{
ChannelPutGetRequester::shared_pointer requester = channelPutGetRequester.lock();
if(!requester.get()) return;
if(!requester) return;
if(isDestroyed) {
requester->putGetDone(
channelDestroyedStatus,getPtrSelf(),nullPVStructure,nullBitSet);
@@ -721,7 +721,7 @@ void ChannelPutGetLocal::putGet(
void ChannelPutGetLocal::getPut()
{
ChannelPutGetRequester::shared_pointer requester = channelPutGetRequester.lock();
if(!requester.get()) return;
if(!requester) return;
if(isDestroyed) {
requester->getPutDone(
channelDestroyedStatus,getPtrSelf(),nullPVStructure,nullBitSet);
@@ -751,7 +751,7 @@ void ChannelPutGetLocal::getPut()
void ChannelPutGetLocal::getGet()
{
ChannelPutGetRequester::shared_pointer requester = channelPutGetRequester.lock();
if(!requester.get()) return;
if(!requester) return;
if(isDestroyed) {
requester->getGetDone(
channelDestroyedStatus,getPtrSelf(),nullPVStructure,nullBitSet);
@@ -821,7 +821,7 @@ public:
PVStructurePtr const & result)
{
ChannelRPCRequester::shared_pointer requester = channelRPCRequester.lock();
if(!requester.get()) return;
if(!requester) return;
requester->requestDone(status, getPtrSelf(), result);
if (isLastRequest.get())
@@ -873,7 +873,7 @@ ChannelRPCLocalPtr ChannelRPCLocal::create(
PVRecordPtr const &pvRecord)
{
Service::shared_pointer service = pvRecord->getService(pvRequest);
if (service.get() == 0)
if (!service)
{
Status status(Status::STATUSTYPE_ERROR,
"ChannelRPC not supported");
@@ -881,7 +881,7 @@ ChannelRPCLocalPtr ChannelRPCLocal::create(
return ChannelRPCLocalPtr();
}
if (channelRPCRequester.get() == 0)
if (!channelRPCRequester)
throw std::invalid_argument("channelRPCRequester == null");
// TODO use std::make_shared
@@ -926,12 +926,12 @@ void ChannelRPCLocal::processRequest(
}
// check null result
if (ok && result.get() == 0)
if (ok && !result)
{
status = Status(Status::STATUSTYPE_FATAL, "RPCService.request(PVStructure) returned null.");
}
ChannelRPCRequester::shared_pointer requester = channelRPCRequester.lock();
if(requester.get()) requester->requestDone(status, getPtrSelf(), result);
if(requester) requester->requestDone(status, getPtrSelf(), result);
if (isLastRequest.get())
destroy();
@@ -950,7 +950,7 @@ void ChannelRPCLocal::processRequest(
// handle user unexpected errors
Status errorStatus(Status::STATUSTYPE_FATAL, ex.what());
ChannelRPCRequester::shared_pointer requester = channelRPCRequester.lock();
if(requester.get()) requester->requestDone(errorStatus, getPtrSelf(), PVStructurePtr());
if(requester) requester->requestDone(errorStatus, getPtrSelf(), PVStructurePtr());
if (isLastRequest.get())
destroy();
}
@@ -960,7 +960,7 @@ void ChannelRPCLocal::processRequest(
Status errorStatus(Status::STATUSTYPE_FATAL,
"Unexpected exception caught while calling RPCServiceAsync.request(PVStructure, RPCResponseCallback).");
ChannelRPCRequester::shared_pointer requester = channelRPCRequester.lock();
if(requester.get()) requester->requestDone(errorStatus, shared_from_this(), PVStructurePtr());
if(requester) requester->requestDone(errorStatus, shared_from_this(), PVStructurePtr());
if (isLastRequest.get())
destroy();
@@ -1170,7 +1170,7 @@ void ChannelArrayLocal::destroy()
void ChannelArrayLocal::getArray(size_t offset, size_t count, size_t stride)
{
ChannelArrayRequester::shared_pointer requester = channelArrayRequester.lock();
if(!requester.get()) return;
if(!requester) return;
if(isDestroyed) {
requester->getArrayDone(channelDestroyedStatus,getPtrSelf(),pvCopy);
return;
@@ -1222,7 +1222,7 @@ void ChannelArrayLocal::putArray(
PVArrayPtr const & pvArray, size_t offset, size_t count, size_t stride)
{
ChannelArrayRequester::shared_pointer requester = channelArrayRequester.lock();
if(!requester.get()) return;
if(!requester) return;
if(isDestroyed) {
requester->putArrayDone(channelDestroyedStatus,getPtrSelf());
return;
@@ -1262,7 +1262,7 @@ void ChannelArrayLocal::putArray(
void ChannelArrayLocal::getLength()
{
ChannelArrayRequester::shared_pointer requester = channelArrayRequester.lock();
if(!requester.get()) return;
if(!requester) return;
size_t length = 0;
const char *exceptionMessage = NULL;
try {
@@ -1281,7 +1281,7 @@ void ChannelArrayLocal::getLength()
void ChannelArrayLocal::setLength(size_t length)
{
ChannelArrayRequester::shared_pointer requester = channelArrayRequester.lock();
if(!requester.get()) return;
if(!requester) return;
if(isDestroyed) {
requester->setLengthDone(channelDestroyedStatus,getPtrSelf());
return;
@@ -1351,7 +1351,7 @@ void ChannelLocal::detach(PVRecordPtr const & pvRecord)
string ChannelLocal::getRequesterName()
{
ChannelRequester::shared_pointer req = requester.lock();
if(!req.get()) return string();
if(!req) return string();
return req->getRequesterName();
}
@@ -1360,7 +1360,7 @@ void ChannelLocal::message(
MessageType messageType)
{
ChannelRequester::shared_pointer req = requester.lock();
if(!req.get()) return;
if(!req) return;
req->message(message,messageType);
}

View File

@@ -68,7 +68,7 @@ ChannelProviderLocalPtr getChannelProviderLocal()
static ChannelProviderLocalPtr channelProviderLocal;
static Mutex mutex;
Lock xx(mutex);
if(channelProviderLocal.get()==NULL) {
if(!channelProviderLocal) {
channelProviderLocal = ChannelProviderLocalPtr(
new ChannelProviderLocal());
ChannelProvider::shared_pointer xxx =
@@ -112,7 +112,7 @@ ChannelFind::shared_pointer ChannelProviderLocal::channelFind(
{
Lock xx(mutex);
PVRecordPtr pvRecord = pvDatabase->findRecord(channelName);
if(pvRecord.get()!=NULL) {
if(pvRecord) {
channelFindRequester->channelFindResult(
Status::Ok,
channelFinder,
@@ -157,7 +157,7 @@ Channel::shared_pointer ChannelProviderLocal::createChannel(
{
Lock xx(mutex);
PVRecordPtr pvRecord = pvDatabase->findRecord(channelName);
if(pvRecord.get()!=NULL) {
if(pvRecord) {
ChannelLocalPtr channel(new ChannelLocal(
getPtrSelf(),channelRequester,pvRecord));
channelRequester->channelCreated(

View File

@@ -219,7 +219,7 @@ void MonitorLocal::releaseActiveElement()
activeElement->overrunBitSet->clear();
}
MonitorRequesterPtr requester = monitorRequester.lock();
if(!requester.get()) return;
if(!requester) return;
requester->monitorEvent(getPtrSelf());
return;
}
@@ -323,7 +323,7 @@ bool MonitorLocal::init(PVStructurePtr const & pvRequest)
size_t queueSize = 2;
PVStructurePtr pvOptions = pvRequest->getSubField<PVStructure>("record._options");
MonitorRequesterPtr requester = monitorRequester.lock();
if(!requester.get()) return false;
if(!requester) return false;
if(pvOptions) {
PVStringPtr pvString = pvOptions->getSubField<PVString>("queueSize");
if(pvString) {
@@ -429,7 +429,7 @@ MonitorFactoryPtr getMonitorFactory()
static Mutex mutex;
Lock xx(mutex);
if(monitorFactoryPtr.get()==NULL) {
if(!monitorFactoryPtr) {
monitorFactoryPtr = MonitorFactoryPtr(
new MonitorFactory());
}