From 28a23dc5a876f2caf934781bcf337cbac0bc8813 Mon Sep 17 00:00:00 2001 From: mrkraimer Date: Fri, 5 Jan 2018 14:38:42 -0500 Subject: [PATCH] remove a create method from monitor; remove unused channelStateChange methods --- documentation/RELEASE_NOTES.md | 15 +++++++ src/Makefile | 2 +- src/pv/pvaClient.h | 34 ---------------- src/pvaClient.cpp | 2 +- src/pvaClientGet.cpp | 18 --------- src/pvaClientMonitor.cpp | 64 +++++------------------------- src/pvaClientProcess.cpp | 47 +--------------------- src/pvaClientPut.cpp | 72 ++++++++++++++++------------------ src/pvaClientPutGet.cpp | 38 +++++++----------- 9 files changed, 76 insertions(+), 216 deletions(-) diff --git a/documentation/RELEASE_NOTES.md b/documentation/RELEASE_NOTES.md index 628422d..adc4440 100644 --- a/documentation/RELEASE_NOTES.md +++ b/documentation/RELEASE_NOTES.md @@ -1,3 +1,18 @@ +EPICS 7 release 4.7.1 +===================== + +API changes to PvaClientMonitor +------------------------------- + +The create method that had arguments for stateChangeRequester and monitorRequester no longer exists. + +API changes to PvaClientGet, ..., PvaClientMonitor +-------------------------------------------------- + +pvaClientGet, ..., pvaClientMonitor all implemented PvaClientChannelStateChangeRequester. +This was never called and has been removed. + + EPICS V4 release 4.7 ==================== diff --git a/src/Makefile b/src/Makefile index 52d3327..f39e87f 100644 --- a/src/Makefile +++ b/src/Makefile @@ -6,7 +6,7 @@ include $(TOP)/configure/CONFIG LIBRARY += pvaClient # shared library ABI version. -SHRLIB_VERSION ?= 4.3.0 +SHRLIB_VERSION ?= 4.7.1 INC += pv/pvaClient.h INC += pv/pvaClientMultiChannel.h diff --git a/src/pv/pvaClient.h b/src/pv/pvaClient.h index b31092f..f89420d 100644 --- a/src/pv/pvaClient.h +++ b/src/pv/pvaClient.h @@ -967,7 +967,6 @@ typedef std::tr1::shared_ptr ChannelProcessRequeste * Overview of PvaClientProcess */ class epicsShareClass PvaClientProcess : - public PvaClientChannelStateChangeRequester, public std::tr1::enable_shared_from_this { public: @@ -1054,13 +1053,11 @@ private: ProcessConnectState connectState; - PvaClientChannelStateChangeRequesterWPtr pvaClientChannelStateChangeRequester; PvaClientProcessRequesterWPtr pvaClientProcessRequester; enum ProcessState {processIdle,processActive,processComplete}; ProcessState processState; ChannelProcessRequesterImplPtr channelProcessRequester; public: - void channelStateChange(PvaClientChannelPtr const & pvaClientChannel, bool isConnected); friend class ChannelProcessRequesterImpl; }; @@ -1104,7 +1101,6 @@ public: * Overview of PvaClientGet */ class epicsShareClass PvaClientGet : - public PvaClientChannelStateChangeRequester, public std::tr1::enable_shared_from_this { public: @@ -1200,14 +1196,12 @@ private: GetConnectState connectState; - PvaClientChannelStateChangeRequesterWPtr pvaClientChannelStateChangeRequester; PvaClientGetRequesterWPtr pvaClientGetRequester; enum GetState {getIdle,getActive,getComplete}; GetState getState; ChannelGetRequesterImplPtr channelGetRequester; public: - void channelStateChange(PvaClientChannelPtr const & pvaClientChannel, bool isConnected); friend class ChannelGetRequesterImpl; }; @@ -1263,7 +1257,6 @@ public: * Overview of PvaClientPut */ class epicsShareClass PvaClientPut : - public PvaClientChannelStateChangeRequester, public std::tr1::enable_shared_from_this { public: @@ -1374,10 +1367,8 @@ private : enum PutState {putIdle,getActive,putActive,putComplete}; PutState putState; ChannelPutRequesterImplPtr channelPutRequester; - PvaClientChannelStateChangeRequesterWPtr pvaClientChannelStateChangeRequester; PvaClientPutRequesterWPtr pvaClientPutRequester; public: - void channelStateChange(PvaClientChannelPtr const & pvaClientChannel, bool isConnected); friend class ChannelPutRequesterImpl; }; @@ -1444,7 +1435,6 @@ public: * Overview of PvaClientPutGet */ class epicsShareClass PvaClientPutGet : - public PvaClientChannelStateChangeRequester, public std::tr1::enable_shared_from_this { public: @@ -1584,10 +1574,8 @@ private : enum PutGetState {putGetIdle,putGetActive,putGetComplete}; PutGetState putGetState; ChannelPutGetRequesterImplPtr channelPutGetRequester; - PvaClientChannelStateChangeRequesterWPtr pvaClientChannelStateChangeRequester; PvaClientPutGetRequesterWPtr pvaClientPutGetRequester; public: - void channelStateChange(PvaClientChannelPtr const & pvaClientChannel, bool isConnected); friend class ChannelPutGetRequesterImpl; }; @@ -1639,7 +1627,6 @@ typedef std::tr1::shared_ptr MonitorRequesterImplPtr; * Overview of PvaClientMonitor */ class epicsShareClass PvaClientMonitor : - public PvaClientChannelStateChangeRequester, public PvaClientMonitorRequester, public std::tr1::enable_shared_from_this { @@ -1656,25 +1643,6 @@ public: PvaClientChannelPtr const & pvaClientChannel, epics::pvData::PVStructurePtr const &pvRequest ); - /** @brief Create a PvaClientMonitor. - * @param pvaClient Interface to PvaClient - * @param channelName channel name - * @param providerName provider name - * @param request The request. - * @param stateChangeRequester The state change requester. Can be null. - * @param monitorRequester The monitor requester. Can be null; - * @return The new instance. - */ - static PvaClientMonitorPtr create( - PvaClientPtr const &pvaClient, - std::string const & channelName, - std::string const & providerName, - std::string const & request, - PvaClientChannelStateChangeRequesterPtr const & stateChangeRequester - = PvaClientChannelStateChangeRequesterPtr(), - PvaClientMonitorRequesterPtr const & monitorRequester - = PvaClientMonitorRequesterPtr() - ); /** @brief Destructor */ ~PvaClientMonitor(); @@ -1767,7 +1735,6 @@ private: epics::pvData::MonitorPtr monitor; epics::pvData::MonitorElementPtr monitorElement; - PvaClientChannelStateChangeRequesterWPtr pvaClientChannelStateChangeRequester; PvaClientMonitorRequesterWPtr pvaClientMonitorRequester; MonitorConnectState connectState; bool userPoll; @@ -1775,7 +1742,6 @@ private: MonitorRequesterImplPtr monitorRequester; public: - void channelStateChange(PvaClientChannelPtr const & channel, bool isConnected); void event(PvaClientMonitorPtr const & monitor); friend class MonitorRequesterImpl; }; diff --git a/src/pvaClient.cpp b/src/pvaClient.cpp index 4fea159..8c17fb7 100644 --- a/src/pvaClient.cpp +++ b/src/pvaClient.cpp @@ -231,4 +231,4 @@ size_t PvaClient::cacheSize() } }} - + diff --git a/src/pvaClientGet.cpp b/src/pvaClientGet.cpp index b9173d5..77c3798 100644 --- a/src/pvaClientGet.cpp +++ b/src/pvaClientGet.cpp @@ -114,24 +114,6 @@ PvaClientGet::~PvaClientGet() } } -void PvaClientGet::channelStateChange(PvaClientChannelPtr const & pvaClientChannel, bool isConnected) -{ - if(PvaClient::getDebug()) { - cout<< "PvaClientGet::channelStateChange" - << " channelName " << pvaClientChannel->getChannel()->getChannelName() - << " isConnected " << (isConnected ? "true" : "false") - << endl; - } - if(isConnected&&!channelGet) - { - connectState = connectActive; - channelGet = pvaClientChannel->getChannel()->createChannelGet(channelGetRequester,pvRequest); - } - PvaClientChannelStateChangeRequesterPtr req(pvaClientChannelStateChangeRequester.lock()); - if(req) { - req->channelStateChange(pvaClientChannel,isConnected); - } -} void PvaClientGet::checkGetState() { diff --git a/src/pvaClientMonitor.cpp b/src/pvaClientMonitor.cpp index 2a7ceb8..2663407 100644 --- a/src/pvaClientMonitor.cpp +++ b/src/pvaClientMonitor.cpp @@ -83,47 +83,13 @@ PvaClientMonitorPtr PvaClientMonitor::create( PvaClientChannelPtr const & pvaClientChannel, PVStructurePtr const &pvRequest) { - if(PvaClient::getDebug()) { - cout<< "PvaClientMonitor::create(pvaClient,pvaClientChannel,pvRequest)\n" - << " channelName " << pvaClientChannel->getChannel()->getChannelName() - << endl; - } + PvaClientMonitorPtr clientMonitor(new PvaClientMonitor(pvaClient,pvaClientChannel,pvRequest)); clientMonitor->monitorRequester = MonitorRequesterImplPtr( new MonitorRequesterImpl(clientMonitor,pvaClient)); return clientMonitor; } -PvaClientMonitorPtr PvaClientMonitor::create( - PvaClientPtr const &pvaClient, - std::string const & channelName, - std::string const & providerName, - std::string const & request, - PvaClientChannelStateChangeRequesterPtr const & stateChangeRequester, - PvaClientMonitorRequesterPtr const & monitorRequester) -{ - if(PvaClient::getDebug()) { - cout<< "PvaClientMonitor::create(pvaClient,channelName,providerName,request,stateChangeRequester,monitorRequester)\n" - << " channelName " << channelName - << " providerName " << providerName - << " request " << request - << endl; - } - CreateRequest::shared_pointer createRequest(CreateRequest::create()); - PVStructurePtr pvRequest(createRequest->createRequest(request)); - if(!pvRequest) throw std::runtime_error(createRequest->getMessage()); - PvaClientChannelPtr pvaClientChannel = pvaClient->createChannel(channelName,providerName); - PvaClientMonitorPtr clientMonitor(new PvaClientMonitor(pvaClient,pvaClientChannel,pvRequest)); - clientMonitor->monitorRequester = MonitorRequesterImplPtr( - new MonitorRequesterImpl(clientMonitor,pvaClient)); - if(stateChangeRequester) clientMonitor->pvaClientChannelStateChangeRequester = stateChangeRequester; - if(monitorRequester) clientMonitor->pvaClientMonitorRequester = monitorRequester; - pvaClientChannel->setStateChangeRequester(clientMonitor); - pvaClientChannel->issueConnect(); - return clientMonitor; -} - - PvaClientMonitor::PvaClientMonitor( PvaClientPtr const &pvaClient, PvaClientChannelPtr const & pvaClientChannel, @@ -137,7 +103,9 @@ PvaClientMonitor::PvaClientMonitor( userWait(false) { if(PvaClient::getDebug()) { - cout<< "PvaClientMonitor::PvaClientMonitor()" << endl; + cout<< "PvaClientMonitor::PvaClientMonitor\n" + << " channelName " << pvaClientChannel->getChannel()->getChannelName() + << endl; } } @@ -153,27 +121,13 @@ PvaClientMonitor::~PvaClientMonitor() } } -void PvaClientMonitor::channelStateChange(PvaClientChannelPtr const & channel, bool isConnected) -{ - if(PvaClient::getDebug()) { - cout<< "PvaClientMonitor::channelStateChange" - << " channelName " << channel->getChannelName() - << " isConnected " << (isConnected ? "true" : "false") - << endl; - } - if(isConnected&&!monitor) - { - connectState = connectActive; - monitor = pvaClientChannel->getChannel()->createMonitor(monitorRequester,pvRequest); - } - PvaClientChannelStateChangeRequesterPtr req(pvaClientChannelStateChangeRequester.lock()); - if(req) { - req->channelStateChange(channel,isConnected); - } -} - void PvaClientMonitor::event(PvaClientMonitorPtr const & monitor) { + if(PvaClient::getDebug()) { + cout << "PvaClientMonitor::event" + << " channelName " << pvaClientChannel->getChannel()->getChannelName() + << endl; + } PvaClientMonitorRequesterPtr req(pvaClientMonitorRequester.lock()); if(req) req->event(monitor); } diff --git a/src/pvaClientProcess.cpp b/src/pvaClientProcess.cpp index 9461768..e8b7d06 100644 --- a/src/pvaClientProcess.cpp +++ b/src/pvaClientProcess.cpp @@ -112,50 +112,6 @@ PvaClientProcess::~PvaClientProcess() } } -void PvaClientProcess::channelStateChange(PvaClientChannelPtr const & pvaClientChannel, bool isConnected) -{ - if(PvaClient::getDebug()) { - cout<< "PvaClientProcess::channelStateChange" - << " channelName " << pvaClientChannel->getChannel()->getChannelName() - << " isConnected " << (isConnected ? "true" : "false") - << endl; - } - if(isConnected) - { - connectState = connectActive; - channelProcess = pvaClientChannel->getChannel()->createChannelProcess(channelProcessRequester,pvRequest); - } - PvaClientChannelStateChangeRequesterPtr req(pvaClientChannelStateChangeRequester.lock()); - if(req) { - req->channelStateChange(pvaClientChannel,isConnected); - } -} - -void PvaClientProcess::checkProcessState() -{ - if(PvaClient::getDebug()) { - cout << "PvaClientProcess::checkProcessState" - << " channelName " << pvaClientChannel->getChannel()->getChannelName() - << endl; - } - if(!pvaClientChannel->getChannel()->isConnected()) { - string message = string("channel ") + pvaClientChannel->getChannel()->getChannelName() - + " PvaClientProcess::checkProcessState channel not connected "; - throw std::runtime_error(message); - } - if(connectState==connectIdle) { - connect(); - } - if(connectState==connectActive){ - string message = string("channel ") + pvaClientChannel->getChannel()->getChannelName() - + " " - + channelProcessConnectStatus.getMessage(); - throw std::runtime_error(message); - } - if(processState==processIdle) process(); -} - - // from ChannelProcessRequester string PvaClientProcess::getRequesterName() { @@ -255,6 +211,7 @@ void PvaClientProcess::issueConnect() throw std::runtime_error(message); } connectState = connectActive; + channelProcessConnectStatus = Status(Status::STATUSTYPE_ERROR, "connect active"); channelProcess = pvaClientChannel->getChannel()->createChannelProcess(channelProcessRequester,pvRequest); } @@ -302,7 +259,7 @@ void PvaClientProcess::issueProcess() << endl; } if(connectState==connectIdle) connect(); - if(processState!=processIdle) { + if(processState==processActive) { string message = string("channel ") + pvaClientChannel->getChannel()->getChannelName() + " PvaClientProcess::issueProcess process aleady active "; throw std::runtime_error(message); diff --git a/src/pvaClientPut.cpp b/src/pvaClientPut.cpp index 561d311..b6be8e1 100644 --- a/src/pvaClientPut.cpp +++ b/src/pvaClientPut.cpp @@ -118,24 +118,6 @@ PvaClientPut::~PvaClientPut() } } -void PvaClientPut::channelStateChange(PvaClientChannelPtr const & pvaClientChannel, bool isConnected) -{ - if(PvaClient::getDebug()) { - cout<< "PvaClientPut::channelStateChange" - << " channelName " << pvaClientChannel->getChannel()->getChannelName() - << " isConnected " << (isConnected ? "true" : "false") - << endl; - } - if(isConnected&&!channelPut) - { - connectState = connectActive; - channelPut = pvaClientChannel->getChannel()->createChannelPut(channelPutRequester,pvRequest); - } - PvaClientChannelStateChangeRequesterPtr req(pvaClientChannelStateChangeRequester.lock()); - if(req) { - req->channelStateChange(pvaClientChannel,isConnected); - } -} void PvaClientPut::checkPutState() { @@ -217,13 +199,17 @@ void PvaClientPut::getDone( << " status.isOK " << (status.isOK() ? "true" : "false") << endl; } - channelGetPutStatus = status; - if(status.isOK()) { - PVStructurePtr pvs = pvaClientData->getPVStructure(); - pvs->copyUnchecked(*pvStructure,*bitSet); - BitSetPtr bs = pvaClientData->getChangedBitSet(); - bs->clear(); - *bs |= *bitSet; + { + Lock xx(mutex); + channelGetPutStatus = status; + if(status.isOK()) { + PVStructurePtr pvs = pvaClientData->getPVStructure(); + pvs->copyUnchecked(*pvStructure,*bitSet); + BitSetPtr bs = pvaClientData->getChangedBitSet(); + bs->clear(); + *bs |= *bitSet; + putState = putComplete; + } } PvaClientPutRequesterPtr req(pvaClientPutRequester.lock()); if(req) { @@ -242,7 +228,11 @@ void PvaClientPut::putDone( << " status.isOK " << (status.isOK() ? "true" : "false") << endl; } - channelGetPutStatus = status; + { + Lock xx(mutex); + channelGetPutStatus = status; + putState = putComplete; + } PvaClientPutRequesterPtr req(pvaClientPutRequester.lock()); if(req) { req->putDone(status,shared_from_this()); @@ -351,14 +341,17 @@ Status PvaClientPut::waitGet() << " channelName " << pvaClientChannel->getChannel()->getChannelName() << endl; } - if(putState!=getActive){ - string message = string("channel ") - + pvaClientChannel->getChannel()->getChannelName() - + " PvaClientPut::waitGet illegal put state"; - throw std::runtime_error(message); + { + Lock xx(mutex); + if(putState==putComplete) return channelGetPutStatus; + if(putState!=getActive){ + string message = string("channel ") + + pvaClientChannel->getChannel()->getChannelName() + + " PvaClientPut::waitGet illegal put state"; + throw std::runtime_error(message); + } } waitForGetPut.wait(); - putState = putComplete; return channelGetPutStatus; } @@ -406,14 +399,17 @@ Status PvaClientPut::waitPut() << " channelName " << pvaClientChannel->getChannel()->getChannelName() << endl; } - if(putState!=putActive){ - string message = string("channel ") - + pvaClientChannel->getChannel()->getChannelName() - + " PvaClientPut::waitPut illegal put state"; - throw std::runtime_error(message); + { + Lock xx(mutex); + if(putState==putComplete) return channelGetPutStatus; + if(putState!=putActive){ + string message = string("channel ") + + pvaClientChannel->getChannel()->getChannelName() + + " PvaClientPut::waitPut illegal put state"; + throw std::runtime_error(message); + } } waitForGetPut.wait(); - putState = putComplete; if(channelGetPutStatus.isOK()) pvaClientData->getChangedBitSet()->clear(); return channelGetPutStatus; } diff --git a/src/pvaClientPutGet.cpp b/src/pvaClientPutGet.cpp index efe6e9c..bde22a3 100644 --- a/src/pvaClientPutGet.cpp +++ b/src/pvaClientPutGet.cpp @@ -131,25 +131,6 @@ PvaClientPutGet::~PvaClientPutGet() } } -void PvaClientPutGet::channelStateChange(PvaClientChannelPtr const & pvaClientChannel, bool isConnected) -{ - if(PvaClient::getDebug()) { - cout<< "PvaClientPutGet::channelStateChange" - << " channelName " << pvaClientChannel->getChannel()->getChannelName() - << " isConnected " << (isConnected ? "true" : "false") - << endl; - } - if(isConnected&&!channelPutGet) - { - connectState = connectActive; - channelPutGet = pvaClientChannel->getChannel()->createChannelPutGet(channelPutGetRequester,pvRequest); - } - PvaClientChannelStateChangeRequesterPtr req(pvaClientChannelStateChangeRequester.lock()); - if(req) { - req->channelStateChange(pvaClientChannel,isConnected); - } -} - void PvaClientPutGet::checkPutGetState() { if(PvaClient::getDebug()) { @@ -235,6 +216,7 @@ void PvaClientPutGet::putGetDone( << endl; } channelPutGetStatus = status; + putGetState = putGetComplete; if(status.isOK()) { PVStructurePtr pvs = pvaClientGetData->getPVStructure(); pvs->copyUnchecked(*getPVStructure,*getChangedBitSet); @@ -262,6 +244,7 @@ void PvaClientPutGet::getPutDone( << endl; } channelPutGetStatus = status; + putGetState = putGetComplete; if(status.isOK()) { PVStructurePtr pvs = pvaClientPutData->getPVStructure(); pvs->copyUnchecked(*putPVStructure,*putBitSet); @@ -289,6 +272,7 @@ void PvaClientPutGet::getGetDone( << endl; } channelPutGetStatus = status; + putGetState = putGetComplete; if(status.isOK()) { PVStructurePtr pvs = pvaClientGetData->getPVStructure(); pvs->copyUnchecked(*getPVStructure,*getChangedBitSet); @@ -407,6 +391,7 @@ Status PvaClientPutGet::waitPutGet() << " channelName " << pvaClientChannel->getChannel()->getChannelName() << endl; } + if(putGetState==putGetComplete) return channelPutGetStatus; if(putGetState!=putGetActive){ string message = string("channel ") + pvaClientChannel->getChannel()->getChannelName() @@ -414,7 +399,6 @@ Status PvaClientPutGet::waitPutGet() throw std::runtime_error(message); } waitForPutGet.wait(); - putGetState = putGetComplete; if(channelPutGetStatus.isOK()) pvaClientPutData->getChangedBitSet()->clear(); return channelPutGetStatus; } @@ -461,6 +445,7 @@ Status PvaClientPutGet::waitGetGet() << " channelName " << pvaClientChannel->getChannel()->getChannelName() << endl; } + if(putGetState==putGetComplete) return channelPutGetStatus; if(putGetState!=putGetActive){ string message = string("channel ") + pvaClientChannel->getChannel()->getChannelName() @@ -468,7 +453,6 @@ Status PvaClientPutGet::waitGetGet() throw std::runtime_error(message); } waitForPutGet.wait(); - putGetState = putGetComplete; return channelPutGetStatus; } @@ -514,6 +498,7 @@ Status PvaClientPutGet::waitGetPut() << " channelName " << pvaClientChannel->getChannel()->getChannelName() << endl; } + if(putGetState==putGetComplete) return channelPutGetStatus; if(putGetState!=putGetActive){ string message = string("channel ") + pvaClientChannel->getChannel()->getChannelName() @@ -521,7 +506,6 @@ Status PvaClientPutGet::waitGetPut() throw std::runtime_error(message); } waitForPutGet.wait(); - putGetState = putGetComplete; return channelPutGetStatus; } @@ -533,7 +517,10 @@ PvaClientGetDataPtr PvaClientPutGet::getGetData() << endl; } checkPutGetState(); - if(putGetState==putGetIdle) getGet(); + if(putGetState==putGetIdle){ + getGet(); + getPut(); + } return pvaClientGetData; } @@ -545,7 +532,10 @@ PvaClientPutDataPtr PvaClientPutGet::getPutData() << endl; } checkPutGetState(); - if(putGetState==putGetIdle) getPut(); + if(putGetState==putGetIdle){ + getGet(); + getPut(); + } return pvaClientPutData; }