reset status in getCache (PVDataHolder) following put with nowtaccess error

This commit is contained in:
2021-10-17 16:43:20 +02:00
parent 90e063f930
commit 80ce12d374
5 changed files with 89 additions and 46 deletions

View File

@@ -721,8 +721,8 @@ template <class CTYPE> int Instant<CTYPE>::getCache(const unsigned int _handle
{
#define __METHOD__ "Instant::getCache(_handle, _dbrType, _val, alarmStatus, alarmSeverity, ts) "
//std::cout << __FILE__ << " " << __LINE__ << " " << __METHOD__ << std::endl;
//std::cout << "handle " << _handle << " dbr input type " << _dbrType << std::endl;
//std::cout << __FILE__ << " " << __LINE__ << " " << __METHOD__ << std::endl;
//std::cout << "handle " << _handle << " dbr input type " << _dbrType << std::endl;
status=ICAFE_NORMAL;
@@ -801,19 +801,8 @@ template <class CTYPE> int Instant<CTYPE>::getCache(const unsigned int _handle
}
//ifNeverConnected - return error
if ( (*it_handle).getChannelRegalia().getCafeConnectionState() == ICAFE_CS_NEVER_CONN)
{
return ICAFE_CS_NEVER_CONN;
}
else if ( (*it_handle).getChannelRegalia().getCafeConnectionState()==ICAFE_CS_CLOSED)
{
return ICAFE_CS_CLOSED;
}
//Reset any put error
//Reset any possible put error that preceded call to getCache
if ( (*it_handle).getStatus() == ECAFE_NOWTACCESS ||
(*it_handle).getStatus() == ECA_PUTFAIL ||
(*it_handle).getStatus() == ECA_PUTCBINPROG) {
@@ -832,6 +821,17 @@ template <class CTYPE> int Instant<CTYPE>::getCache(const unsigned int _handle
//ifNeverConnected - return error
if ( (*it_handle).getChannelRegalia().getCafeConnectionState() == ICAFE_CS_NEVER_CONN)
{
return ICAFE_CS_NEVER_CONN;
}
else if ( (*it_handle).getChannelRegalia().getCafeConnectionState()==ICAFE_CS_CLOSED)
{
return ICAFE_CS_CLOSED;
}
// Meant for use in callbacks in monitors!
// Does not check what the client is requesting.
@@ -1114,7 +1114,6 @@ template <class CTYPE> int Instant<CTYPE>::getCache(const unsigned int *handleA
{
//Very possibly waveforems will need longer to report back!
if(helper.getNelemNative(handleArray[i])!=1)
{
@@ -1274,10 +1273,11 @@ template <class CTYPE> int Instant<CTYPE>::getCache(const unsigned int *handleA
dbr_short_t a1, a2;
epicsTimeStamp ts1;
//std::cout << __FILE__ << "//" << __LINE__ << "//" << __METHOD__ << std::endl;
statusArray[i]=Instant::getCache(handleArray[i], _dbrType, &val[i],
a1, a2, ts1);
//std::cout << "status " << statusArray[i] << std::endl;
chtype channelType= _dbrType;
if (dbr_type_is_TIME(channelType))