db: don't set record INVALID if fetching SIML fails

This commit is contained in:
Ralph Lange
2017-11-30 14:39:53 +01:00
parent d1a1832968
commit a59abe82f4
3 changed files with 17 additions and 8 deletions

View File

@@ -291,22 +291,29 @@ long dbGetNelements(const struct link *plink, long *nelements)
return plset->getElements(plink, nelements);
}
long dbGetLink(struct link *plink, short dbrType, void *pbuffer,
long *poptions, long *pnRequest)
long dbTryGetLink(struct link *plink, short dbrType, void *pbuffer,
long *poptions, long *pnRequest)
{
struct dbCommon *precord = plink->precord;
lset *plset = plink->lset;
long status;
if (poptions && *poptions) {
printf("dbGetLink: Use of poptions no longer supported\n");
printf("dbTryGetLink: Use of poptions no longer supported\n");
*poptions = 0;
}
if (!plset || !plset->getValue)
return -1;
status = plset->getValue(plink, dbrType, pbuffer, pnRequest);
return plset->getValue(plink, dbrType, pbuffer, pnRequest);
}
long dbGetLink(struct link *plink, short dbrType, void *pbuffer,
long *poptions, long *pnRequest)
{
struct dbCommon *precord = plink->precord;
long status;
status = dbTryGetLink(plink, dbrType, pbuffer, poptions, pnRequest);
if (status)
recGblSetSevr(precord, LINK_ALARM, INVALID_ALARM);
return status;

View File

@@ -100,6 +100,8 @@ epicsShareFunc long dbLoadLinkArray(struct link *, short dbrType, void *pbuffer,
epicsShareFunc long dbGetNelements(const struct link *plink, long *nelements);
epicsShareFunc int dbIsLinkConnected(const struct link *plink); /* 0 or 1 */
epicsShareFunc int dbGetLinkDBFtype(const struct link *plink);
epicsShareFunc long dbTryGetLink(struct link *, short dbrType, void *pbuffer,
long *options, long *nRequest);
epicsShareFunc long dbGetLink(struct link *, short dbrType, void *pbuffer,
long *options, long *nRequest);
epicsShareFunc long dbGetControlLimits(const struct link *plink, double *low,

View File

@@ -403,8 +403,8 @@ long recGblGetSimm(struct dbCommon *pcommon, epicsEnum16 *psscn,
long status;
recGblSaveSimm(*psscn, poldsimm, *psimm);
status = dbGetLink(psiml, DBR_USHORT, psimm, 0, 0);
if (status) return status;
status = dbTryGetLink(psiml, DBR_USHORT, psimm, 0, 0);
if (status && !pcommon->nsev) pcommon->nsta = LINK_ALARM;
recGblCheckSimm(pcommon, psscn, *poldsimm, *psimm);
return 0;
}