From 56d96716f073a7e423ad633508ac24ee09d33aa4 Mon Sep 17 00:00:00 2001 From: mrkraimer Date: Fri, 19 Feb 2016 09:39:16 -0500 Subject: [PATCH] if channel is connected when channelCreated is called then don't wait for channelState change --- src/pvaClientChannel.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/pvaClientChannel.cpp b/src/pvaClientChannel.cpp index 4224380..e50b009 100644 --- a/src/pvaClientChannel.cpp +++ b/src/pvaClientChannel.cpp @@ -173,6 +173,10 @@ void PvaClientChannel::channelCreated(const Status& status, Channel::shared_poin if(isDestroyed) throw std::runtime_error("pvaClientChannel was destroyed"); if(status.isOK()) { this->channel = channel; + if(channel->isConnected()) { + connectState = connected; + channelConnectStatus = Status::Ok; + } return; } cout << "PvaClientChannel::channelCreated status " << status.getMessage() << " why??\n"; @@ -258,8 +262,7 @@ void PvaClientChannel::issueConnect() if(connectState!=connectIdle) { throw std::runtime_error("pvaClientChannel already connected"); } - channelRequester = ChannelRequester::shared_pointer(new ChannelRequesterImpl(this)); - + channelConnectStatus = Status( Status::STATUSTYPE_ERROR, getChannelName() + " createChannel failed"); @@ -269,6 +272,7 @@ void PvaClientChannel::issueConnect() if(!provider) { throw std::runtime_error(getChannelName() + " provider " + providerName + " not registered"); } + channelRequester = ChannelRequester::shared_pointer(new ChannelRequesterImpl(this)); channel = provider->createChannel(channelName,channelRequester,ChannelProvider::PRIORITY_DEFAULT); if(!channel) { throw std::runtime_error(getChannelName() + " channelCreate failed "); @@ -278,6 +282,7 @@ void PvaClientChannel::issueConnect() Status PvaClientChannel::waitConnect(double timeout) { if(isDestroyed) throw std::runtime_error("pvaClientChannel was destroyed"); + if(channel->isConnected()) return Status::Ok; waitForConnect.wait(timeout); return channelConnectStatus; }