From bac1307136e79d35d8d91e4941bae246f9fe81de Mon Sep 17 00:00:00 2001 From: mrkraimer Date: Tue, 24 Jul 2018 10:33:15 -0400 Subject: [PATCH 1/2] channel connect: call requester from channel access callback --- src/ca/caChannel.cpp | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/ca/caChannel.cpp b/src/ca/caChannel.cpp index b19349b..8a89de4 100644 --- a/src/ca/caChannel.cpp +++ b/src/ca/caChannel.cpp @@ -62,6 +62,20 @@ void CAChannel::connected() if(DEBUG_LEVEL>0) { cout<< "CAChannel::connected " << channelName << endl; } + bool callChannelConnected = false; + { + Lock lock(requestsMutex); + if(!channelCreated) { + channelCreated = true; + callChannelConnected = true; + } + } + if(callChannelConnected) { + 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(!putQueue.empty()) { putQueue.front()->activate(); putQueue.pop(); @@ -123,13 +137,8 @@ void CAChannel::activate(short priority) this, priority, // TODO mapping &channelID); - if (result == ECA_NORMAL) + if (result != ECA_NORMAL) { - channelCreated = true; - CAChannelProviderPtr provider(channelProvider.lock()); - if(provider) provider->addChannel(shared_from_this()); - EXCEPTION_GUARD(req->channelCreated(Status::Ok, shared_from_this())); - } else { Status errorStatus(Status::STATUSTYPE_ERROR, string(ca_message(result))); EXCEPTION_GUARD(req->channelCreated(errorStatus, shared_from_this())); } From 0d4bd9ad9255d5d25e3330422cc60488fed1b0e5 Mon Sep 17 00:00:00 2001 From: mrkraimer Date: Mon, 30 Jul 2018 14:01:42 -0400 Subject: [PATCH 2/2] fix issue #118 --- src/ca/dbdToPv.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ca/dbdToPv.cpp b/src/ca/dbdToPv.cpp index 636dc5e..09f30f7 100644 --- a/src/ca/dbdToPv.cpp +++ b/src/ca/dbdToPv.cpp @@ -392,7 +392,7 @@ Status DbdToPv::getFromDBD( copy_DBRScalarArray(value,count,pvValue); break; case DBR_LONG: - copy_DBRScalarArray(value,count,pvValue); + copy_DBRScalarArray(value,count,pvValue); break; case DBR_FLOAT: copy_DBRScalarArray(value,count,pvValue); @@ -430,7 +430,7 @@ Status DbdToPv::getFromDBD( case DBR_STRING: copy_DBRScalar(value,pvValue); break; case DBR_CHAR: copy_DBRScalar(value,pvValue); break; case DBR_SHORT: copy_DBRScalar(value,pvValue); break; - case DBR_LONG: copy_DBRScalar(value,pvValue); break; + case DBR_LONG: copy_DBRScalar(value,pvValue); break; case DBR_FLOAT: copy_DBRScalar(value,pvValue); break; case DBR_DOUBLE: copy_DBRScalar(value,pvValue); break; default: