simplify monitors; cleanup code; fix race condidition for monitor cleanup
This commit is contained in:
@@ -109,8 +109,8 @@ public:
|
||||
{return channelLocal;}
|
||||
virtual void cancel(){}
|
||||
virtual void lastRequest() {}
|
||||
virtual void lock() {mutex.lock();}
|
||||
virtual void unlock() {mutex.unlock();}
|
||||
virtual void lock() {pvRecord->lock();}
|
||||
virtual void unlock() {pvRecord->unlock();}
|
||||
private:
|
||||
shared_pointer getPtrSelf()
|
||||
{
|
||||
@@ -133,8 +133,8 @@ private:
|
||||
ChannelLocalPtr channelLocal;
|
||||
ChannelProcessRequester::shared_pointer channelProcessRequester;
|
||||
PVRecordPtr pvRecord;
|
||||
Mutex mutex;
|
||||
int nProcess;
|
||||
Mutex mutex;
|
||||
};
|
||||
|
||||
ChannelProcessLocalPtr ChannelProcessLocal::create(
|
||||
@@ -242,8 +242,8 @@ public:
|
||||
{return channelLocal;}
|
||||
virtual void cancel(){}
|
||||
virtual void lastRequest() {}
|
||||
virtual void lock() {mutex.lock();}
|
||||
virtual void unlock() {mutex.unlock();}
|
||||
virtual void lock() {pvRecord->lock();}
|
||||
virtual void unlock() {pvRecord->unlock();}
|
||||
private:
|
||||
shared_pointer getPtrSelf()
|
||||
{
|
||||
@@ -401,8 +401,8 @@ public:
|
||||
{return channelLocal;}
|
||||
virtual void cancel(){}
|
||||
virtual void lastRequest() {}
|
||||
virtual void lock() {mutex.lock();}
|
||||
virtual void unlock() {mutex.unlock();}
|
||||
virtual void lock() {pvRecord->lock();}
|
||||
virtual void unlock() {pvRecord->unlock();}
|
||||
private:
|
||||
shared_pointer getPtrSelf()
|
||||
{
|
||||
@@ -570,8 +570,8 @@ public:
|
||||
{return channelLocal;}
|
||||
virtual void cancel(){}
|
||||
virtual void lastRequest() {}
|
||||
virtual void lock() {mutex.lock();}
|
||||
virtual void unlock() {mutex.unlock();}
|
||||
virtual void lock() {pvRecord->lock();}
|
||||
virtual void unlock() {pvRecord->unlock();}
|
||||
private:
|
||||
shared_pointer getPtrSelf()
|
||||
{
|
||||
@@ -783,8 +783,8 @@ public:
|
||||
{return channelLocal;}
|
||||
virtual void cancel(){}
|
||||
virtual void lastRequest() {}
|
||||
virtual void lock() {mutex.lock();}
|
||||
virtual void unlock() {mutex.unlock();}
|
||||
virtual void lock() {pvRecord->lock();}
|
||||
virtual void unlock() {pvRecord->unlock();}
|
||||
private:
|
||||
shared_pointer getPtrSelf()
|
||||
{
|
||||
@@ -873,66 +873,29 @@ ChannelArrayLocalPtr ChannelArrayLocal::create(
|
||||
PVScalarArrayPtr xxx = static_pointer_cast<PVScalarArray>(pvField);
|
||||
pvCopy = getPVDataCreate()->createPVScalarArray(
|
||||
xxx->getScalarArray()->getElementType());
|
||||
ChannelArrayLocalPtr array(new ChannelArrayLocal(
|
||||
channelLocal,
|
||||
channelArrayRequester,
|
||||
pvArray,
|
||||
pvCopy,
|
||||
pvRecord));
|
||||
if(pvRecord->getTraceLevel()>0)
|
||||
{
|
||||
cout << "ChannelArrayLocal::create";
|
||||
cout << " recordName " << pvRecord->getRecordName() << endl;
|
||||
}
|
||||
channelArrayRequester->channelArrayConnect(
|
||||
Status::Ok, array, pvCopy->getArray());
|
||||
return array;
|
||||
}
|
||||
if(pvField->getField()->getType()==structureArray) {
|
||||
} else if(pvField->getField()->getType()==structureArray) {
|
||||
PVStructureArrayPtr xxx = static_pointer_cast<PVStructureArray>(pvField);
|
||||
pvCopy = getPVDataCreate()->createPVStructureArray(
|
||||
xxx->getStructureArray()->getStructure());
|
||||
ChannelArrayLocalPtr array(new ChannelArrayLocal(
|
||||
channelLocal,
|
||||
channelArrayRequester,
|
||||
pvArray,
|
||||
pvCopy,
|
||||
pvRecord));
|
||||
if(pvRecord->getTraceLevel()>0)
|
||||
{
|
||||
cout << "ChannelArrayLocal::create";
|
||||
cout << " recordName " << pvRecord->getRecordName() << endl;
|
||||
}
|
||||
channelArrayRequester->channelArrayConnect(
|
||||
Status::Ok, array, pvCopy->getArray());
|
||||
return array;
|
||||
}
|
||||
if(pvField->getField()->getType()==unionArray) {
|
||||
} else {
|
||||
PVUnionArrayPtr xxx = static_pointer_cast<PVUnionArray>(pvField);
|
||||
pvCopy = getPVDataCreate()->createPVUnionArray(
|
||||
xxx->getUnionArray()->getUnion());
|
||||
ChannelArrayLocalPtr array(new ChannelArrayLocal(
|
||||
channelLocal,
|
||||
channelArrayRequester,
|
||||
pvArray,
|
||||
pvCopy,
|
||||
pvRecord));
|
||||
if(pvRecord->getTraceLevel()>0)
|
||||
{
|
||||
cout << "ChannelArrayLocal::create";
|
||||
cout << " recordName " << pvRecord->getRecordName() << endl;
|
||||
}
|
||||
channelArrayRequester->channelArrayConnect(
|
||||
Status::Ok, array, pvCopy->getArray());
|
||||
return array;
|
||||
}
|
||||
|
||||
Status status(Status::STATUSTYPE_ERROR,
|
||||
"Logic error. Should not reach this code");
|
||||
ChannelArrayLocalPtr channelArray;
|
||||
ArrayConstPtr array;
|
||||
channelArrayRequester->channelArrayConnect(status,channelArray,array);
|
||||
return channelArray;
|
||||
ChannelArrayLocalPtr array(new ChannelArrayLocal(
|
||||
channelLocal,
|
||||
channelArrayRequester,
|
||||
pvArray,
|
||||
pvCopy,
|
||||
pvRecord));
|
||||
if(pvRecord->getTraceLevel()>0)
|
||||
{
|
||||
cout << "ChannelArrayLocal::create";
|
||||
cout << " recordName " << pvRecord->getRecordName() << endl;
|
||||
}
|
||||
channelArrayRequester->channelArrayConnect(
|
||||
Status::Ok, array, pvCopy->getArray());
|
||||
return array;
|
||||
}
|
||||
|
||||
|
||||
@@ -1083,23 +1046,6 @@ void ChannelArrayLocal::setLength(size_t length)
|
||||
}
|
||||
|
||||
|
||||
class ChannelRPCLocal :
|
||||
public ChannelRPC
|
||||
{
|
||||
public:
|
||||
POINTER_DEFINITIONS(ChannelRPCLocal);
|
||||
virtual ~ChannelRPCLocal();
|
||||
static ChannelRPC::shared_pointer create(
|
||||
ChannelProviderLocalPtr const &channelProvider,
|
||||
ChannelRPC::shared_pointer const & channelRPCRequester,
|
||||
PVStructurePtr const & pvRequest,
|
||||
PVRecordPtr const &pvRecord);
|
||||
virtual void request(
|
||||
PVStructurePtr const & pvArgument,
|
||||
bool lastRequest);
|
||||
};
|
||||
|
||||
|
||||
ChannelLocal::ChannelLocal(
|
||||
ChannelProviderLocalPtr const & provider,
|
||||
ChannelRequester::shared_pointer const & requester,
|
||||
@@ -1161,6 +1107,8 @@ string ChannelLocal::getRemoteAddress()
|
||||
|
||||
Channel::ConnectionState ChannelLocal::getConnectionState()
|
||||
{
|
||||
Lock xx(mutex);
|
||||
if(beingDestroyed) return Channel::DESTROYED;
|
||||
return Channel::CONNECTED;
|
||||
}
|
||||
|
||||
@@ -1176,6 +1124,8 @@ ChannelRequester::shared_pointer ChannelLocal::getChannelRequester()
|
||||
|
||||
bool ChannelLocal::isConnected()
|
||||
{
|
||||
Lock xx(mutex);
|
||||
if(beingDestroyed) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user