merge with epics-base
This commit is contained in:
@@ -62,20 +62,24 @@ void CAChannel::connected()
|
||||
if(DEBUG_LEVEL>0) {
|
||||
cout<< "CAChannel::connected " << channelName << endl;
|
||||
}
|
||||
bool callChannelConnected = false;
|
||||
bool callChannelCreated = false;
|
||||
{
|
||||
Lock lock(requestsMutex);
|
||||
if(!channelCreated) {
|
||||
channelCreated = true;
|
||||
callChannelConnected = true;
|
||||
callChannelCreated = true;
|
||||
}
|
||||
}
|
||||
if(callChannelConnected) {
|
||||
if(callChannelCreated) {
|
||||
CAChannelProviderPtr provider(channelProvider.lock());
|
||||
if(provider) provider->addChannel(shared_from_this());
|
||||
ChannelRequester::shared_pointer req(channelRequester.lock());
|
||||
if(req) EXCEPTION_GUARD(req->channelCreated(Status::Ok, shared_from_this()));
|
||||
}
|
||||
while(!getFieldQueue.empty()) {
|
||||
getFieldQueue.front()->activate();
|
||||
getFieldQueue.pop();
|
||||
}
|
||||
while(!putQueue.empty()) {
|
||||
putQueue.front()->activate();
|
||||
putQueue.pop();
|
||||
@@ -239,7 +243,8 @@ void CAChannel::getField(GetFieldRequester::shared_pointer const & requester,
|
||||
if(DEBUG_LEVEL>0) {
|
||||
cout << "CAChannel::getField " << channelName << endl;
|
||||
}
|
||||
CAChannelGetFieldPtr getField(new CAChannelGetField(requester,subField));
|
||||
CAChannelGetFieldPtr getField(
|
||||
new CAChannelGetField(shared_from_this(),requester,subField));
|
||||
{
|
||||
Lock lock(requestsMutex);
|
||||
if(getConnectionState()!=Channel::CONNECTED) {
|
||||
@@ -353,8 +358,10 @@ void CAChannel::printInfo(std::ostream& out)
|
||||
|
||||
|
||||
CAChannelGetField::CAChannelGetField(
|
||||
CAChannelPtr const &channel,
|
||||
GetFieldRequester::shared_pointer const & requester,std::string const & subField)
|
||||
: getFieldRequester(requester),
|
||||
: channel(channel),
|
||||
getFieldRequester(requester),
|
||||
subField(subField)
|
||||
{
|
||||
if(DEBUG_LEVEL>0) {
|
||||
@@ -362,6 +369,12 @@ CAChannelGetField::CAChannelGetField(
|
||||
}
|
||||
}
|
||||
|
||||
void CAChannelGetField::activate()
|
||||
{
|
||||
CAChannelPtr chan(channel.lock());
|
||||
if(chan) callRequester(chan);
|
||||
}
|
||||
|
||||
CAChannelGetField::~CAChannelGetField()
|
||||
{
|
||||
if(DEBUG_LEVEL>0) {
|
||||
|
||||
Reference in New Issue
Block a user