diff --git a/src/pv/pvaClient.h b/src/pv/pvaClient.h index a554e50..7ba6586 100644 --- a/src/pv/pvaClient.h +++ b/src/pv/pvaClient.h @@ -37,7 +37,6 @@ #include - namespace epics { namespace pvaClient { class PvaClient; @@ -183,6 +182,7 @@ private: bool pvaStarted; bool caStarted; epics::pvData::Mutex mutex; + epics::pvAccess::ChannelProviderRegistry::shared_pointer channelRegistry; }; // folowing private to PvaClientChannel diff --git a/src/pvaClient.cpp b/src/pvaClient.cpp index c5f1d81..141c58c 100644 --- a/src/pvaClient.cpp +++ b/src/pvaClient.cpp @@ -104,22 +104,31 @@ PvaClientPtr PvaClient::get(std::string const & providerNames) PvaClient::PvaClient(std::string const & providerNames) : pvaClientChannelCache(new PvaClientChannelCache()), pvaStarted(false), - caStarted(false) + caStarted(false), + channelRegistry(ChannelProviderRegistry::getChannelProviderRegistry()) { stringstream ss(providerNames); string providerName; + if(PvaClient::debug) { + cout<< "PvaClient::PvaClient()\n"; + } while (getline(ss, providerName, ' ')) { - ChannelProviderRegistry::shared_pointer registry(getChannelProviderRegistry()); if(providerName=="pva") { + if(PvaClient::debug) { + cout<< "calling ClientFactory::start()\n"; + } ClientFactory::start(); pvaStarted = true; } else if(providerName=="ca") { + if(PvaClient::debug) { + cout<< "calling CAClientFactory::start()\n"; + } CAClientFactory::start(); caStarted = true; - } else { - if(!registry->getProvider(providerName)) { - cerr << "PvaClient::get provider " << providerName << " not known" << endl; + } else { + if(!channelRegistry->getProvider(providerName)) { + cerr << "PvaClient::get provider " << providerName << " not known" << endl; } } } @@ -141,6 +150,7 @@ PvaClient::~PvaClient() { CAClientFactory::stop(); if(PvaClient::debug) cout<< "after calling CAClientFactory::stop()\n"; } +channelRegistry.reset(); } string PvaClient:: getRequesterName() diff --git a/src/pvaClientChannel.cpp b/src/pvaClientChannel.cpp index b3f4f31..48b2bac 100644 --- a/src/pvaClientChannel.cpp +++ b/src/pvaClientChannel.cpp @@ -331,7 +331,7 @@ void PvaClientChannel::issueConnect() } connectState = connectActive; } - ChannelProviderRegistry::shared_pointer reg = getChannelProviderRegistry(); + ChannelProviderRegistry::shared_pointer reg = ChannelProviderRegistry::getChannelProviderRegistry(); ChannelProvider::shared_pointer provider = reg->getProvider(providerName); if(!provider) { throw std::runtime_error(channelName + " provider " + providerName + " not registered");