From fd77d35b2043386cedade6e9a63fd2bf8373a4bc Mon Sep 17 00:00:00 2001 From: mrkraimer Date: Tue, 23 Apr 2019 14:04:13 -0400 Subject: [PATCH] address issue #54 --- src/pv/pvaClient.h | 1 + src/pvaClientRPC.cpp | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/pv/pvaClient.h b/src/pv/pvaClient.h index 123aa23..2107726 100644 --- a/src/pv/pvaClient.h +++ b/src/pv/pvaClient.h @@ -1813,6 +1813,7 @@ private: enum RPCState {rpcIdle,rpcActive,rpcComplete}; RPCState rpcState; + epics::pvData::Status requestStatus; double responseTimeout; friend class RPCRequesterImpl; }; diff --git a/src/pvaClientRPC.cpp b/src/pvaClientRPC.cpp index 94a5411..678dfc9 100644 --- a/src/pvaClientRPC.cpp +++ b/src/pvaClientRPC.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #define epicsExportSharedSymbols @@ -180,6 +181,7 @@ void PvaClientRPC::requestDone( PvaClientRPCRequesterPtr req = pvaClientRPCRequester.lock(); { Lock xx(mutex); + requestStatus = status; if(PvaClient::getDebug()) { string channelName("disconnected"); Channel::shared_pointer chan(channel.lock()); @@ -224,7 +226,7 @@ void PvaClientRPC::connect() + channelName + " PvaClientRPC::connect " + status.getMessage(); - throw std::runtime_error(message); + throw RPCRequestException(Status::STATUSTYPE_ERROR,message); } void PvaClientRPC::issueConnect() @@ -305,10 +307,18 @@ PVStructure::shared_pointer PvaClientRPC::request(PVStructure::shared_pointer co string message = "channel " + channelName + " PvaClientRPC::request request timeout "; - throw std::runtime_error(message); + throw RPCRequestException(Status::STATUSTYPE_ERROR,message); } rpcState = rpcIdle; - return pvResponse; + if(requestStatus.isOK()) return pvResponse; + Channel::shared_pointer chan(channel.lock()); + string channelName("disconnected"); + if(chan) channelName = chan->getChannelName(); + string message = "channel " + + channelName + + " PvaClientRPC::request status "; + message += requestStatus.getMessage(); + throw RPCRequestException(Status::STATUSTYPE_ERROR,message); }