Skip to content

Commit d0cf47c

Browse files
exzombieanjohnson
authored andcommitted
Propagate AMSG through MSS links
MS and MSI links do not propagate STAT and therefore do not propagate AMSG, either. CA, CP and CPP links also do not propagate AMSG, but the reason is technical: the message is not available over Channel Access.
1 parent f4aee8e commit d0cf47c

File tree

3 files changed

+16
-7
lines changed

3 files changed

+16
-7
lines changed

modules/database/src/ioc/db/dbDbLink.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -226,9 +226,10 @@ static long dbDbGetValue(struct link *plink, short dbrType, void *pbuffer,
226226
}
227227

228228
if (!status && precord != dbChannelRecord(chan))
229-
recGblInheritSevr(plink->value.pv_link.pvlMask & pvlOptMsMode,
229+
recGblInheritSevrMsg(plink->value.pv_link.pvlMask & pvlOptMsMode,
230230
plink->precord,
231-
dbChannelRecord(chan)->stat, dbChannelRecord(chan)->sevr);
231+
dbChannelRecord(chan)->stat, dbChannelRecord(chan)->sevr,
232+
dbChannelRecord(chan)->amsg);
232233
return status;
233234
}
234235

@@ -378,8 +379,8 @@ static long dbDbPutValue(struct link *plink, short dbrType,
378379
dbCommon *pdest = dbChannelRecord(chan);
379380
long status = dbPut(paddr, dbrType, pbuffer, nRequest);
380381

381-
recGblInheritSevr(ppv_link->pvlMask & pvlOptMsMode, pdest, psrce->nsta,
382-
psrce->nsev);
382+
recGblInheritSevrMsg(ppv_link->pvlMask & pvlOptMsMode, pdest, psrce->nsta,
383+
psrce->nsev, psrce->namsg);
383384
if (status)
384385
return status;
385386

modules/database/src/ioc/db/recGbl.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -260,8 +260,8 @@ int recGblSetSevr(void *precord, epicsEnum16 new_stat, epicsEnum16 new_sevr)
260260
return recGblSetSevrMsg(precord, new_stat, new_sevr, NULL);
261261
}
262262

263-
void recGblInheritSevr(int msMode, void *precord, epicsEnum16 stat,
264-
epicsEnum16 sevr)
263+
void recGblInheritSevrMsg(int msMode, void *precord, epicsEnum16 stat,
264+
epicsEnum16 sevr, const char *msg)
265265
{
266266
switch (msMode) {
267267
case pvlOptNMS:
@@ -274,11 +274,17 @@ void recGblInheritSevr(int msMode, void *precord, epicsEnum16 stat,
274274
recGblSetSevr(precord, LINK_ALARM, sevr);
275275
break;
276276
case pvlOptMSS:
277-
recGblSetSevr(precord, stat, sevr);
277+
/* Only MSS inherits msg */
278+
recGblSetSevrMsg(precord, stat, sevr, "%s", msg);
278279
break;
279280
}
280281
}
281282

283+
void recGblInheritSevr(int msMode, void *precord, epicsEnum16 stat,
284+
epicsEnum16 sevr)
285+
{
286+
recGblInheritSevrMsg(msMode, precord, stat, sevr, NULL);
287+
}
282288

283289
void recGblFwdLink(void *precord)
284290
{

modules/database/src/ioc/db/recGbl.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ DBCORE_API int recGblSetSevr(void *precord, epicsEnum16 new_stat,
7373
epicsEnum16 new_sevr);
7474
DBCORE_API void recGblInheritSevr(int msMode, void *precord, epicsEnum16 stat,
7575
epicsEnum16 sevr);
76+
DBCORE_API void recGblInheritSevrMsg(int msMode, void *precord, epicsEnum16 stat,
77+
epicsEnum16 sevr, const char *msg);
7678
DBCORE_API int recGblSetSevrMsg(void *precord, epicsEnum16 new_stat,
7779
epicsEnum16 new_sevr,
7880
EPICS_PRINTF_FMT(const char *msg), ...) EPICS_PRINTF_STYLE(4,5);

0 commit comments

Comments
 (0)