work on RAII and memory leaks
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user