diff --git a/modules/database/src/std/rec/aSubRecord.c b/modules/database/src/std/rec/aSubRecord.c index 3e4acb95c..c6ba13038 100644 --- a/modules/database/src/std/rec/aSubRecord.c +++ b/modules/database/src/std/rec/aSubRecord.c @@ -302,16 +302,6 @@ static long get_outlinkNumber(int fieldIndex) { return -1; } -#define do_recursion_safe(func, plink, ...) \ -do { \ - dbScanLock((dbCommon*)prec); \ - DBLINK link = *(plink); \ - (plink)->lset = NULL; \ - func(&link, __VA_ARGS__); \ - (plink)->lset = link.lset; \ - dbScanUnlock((dbCommon*)prec); \ -} while(0) - static long get_units(DBADDR *paddr, char *units) { aSubRecord *prec = (aSubRecord *)paddr->precord; @@ -319,12 +309,12 @@ static long get_units(DBADDR *paddr, char *units) linkNumber = get_inlinkNumber(dbGetFieldIndex(paddr)); if (linkNumber >= 0) { - do_recursion_safe(dbGetUnits, &prec->inpa + linkNumber, units, DB_UNITS_SIZE); + dbGetUnits(&prec->inpa + linkNumber, units, DB_UNITS_SIZE); return 0; } linkNumber = get_outlinkNumber(dbGetFieldIndex(paddr)); if (linkNumber >= 0) { - do_recursion_safe(dbGetUnits, &prec->outa + linkNumber, units, DB_UNITS_SIZE); + dbGetUnits(&prec->outa + linkNumber, units, DB_UNITS_SIZE); } return 0; } @@ -332,25 +322,27 @@ static long get_units(DBADDR *paddr, char *units) static long get_precision(const DBADDR *paddr, long *pprecision) { aSubRecord *prec = (aSubRecord *)paddr->precord; - long status; int fieldIndex = dbGetFieldIndex(paddr); int linkNumber; - short precision; *pprecision = prec->prec; linkNumber = get_inlinkNumber(fieldIndex); if (linkNumber >= 0) { - do_recursion_safe(status = dbGetPrecision, &prec->inpa + linkNumber, &precision); - if (status == 0) *pprecision = precision; + short precision; + + if (dbGetPrecision(&prec->inpa + linkNumber, &precision) == 0) + *pprecision = precision; return 0; } + linkNumber = get_outlinkNumber(fieldIndex); if (linkNumber >= 0) { - do_recursion_safe(status = dbGetPrecision, &prec->outa + linkNumber, &precision); - if (status == 0) *pprecision = precision; - return 0; - } - recGblGetPrec(paddr, pprecision); + short precision; + + if (dbGetPrecision(&prec->outa + linkNumber, &precision) == 0) + *pprecision = precision; + } else + recGblGetPrec(paddr, pprecision); return 0; } @@ -362,16 +354,16 @@ static long get_graphic_double(DBADDR *paddr, struct dbr_grDouble *pgd) linkNumber = get_inlinkNumber(fieldIndex); if (linkNumber >= 0) { - do_recursion_safe(dbGetGraphicLimits, &prec->inpa + linkNumber, - &pgd->lower_disp_limit, - &pgd->upper_disp_limit); + dbGetGraphicLimits(&prec->inpa + linkNumber, + &pgd->lower_disp_limit, + &pgd->upper_disp_limit); return 0; } linkNumber = get_outlinkNumber(fieldIndex); if (linkNumber >= 0) { - do_recursion_safe(dbGetGraphicLimits, &prec->outa + linkNumber, - &pgd->lower_disp_limit, - &pgd->upper_disp_limit); + dbGetGraphicLimits(&prec->outa + linkNumber, + &pgd->lower_disp_limit, + &pgd->upper_disp_limit); } return 0; } @@ -390,20 +382,20 @@ static long get_alarm_double(DBADDR *paddr, struct dbr_alDouble *pad) linkNumber = get_inlinkNumber(fieldIndex); if (linkNumber >= 0) { - do_recursion_safe(dbGetAlarmLimits, &prec->inpa + linkNumber, - &pad->lower_alarm_limit, - &pad->lower_warning_limit, - &pad->upper_warning_limit, - &pad->upper_alarm_limit); + dbGetAlarmLimits(&prec->inpa + linkNumber, + &pad->lower_alarm_limit, + &pad->lower_warning_limit, + &pad->upper_warning_limit, + &pad->upper_alarm_limit); return 0; } linkNumber = get_outlinkNumber(fieldIndex); if (linkNumber >= 0) { - do_recursion_safe(dbGetAlarmLimits, &prec->outa + linkNumber, - &pad->lower_alarm_limit, - &pad->lower_warning_limit, - &pad->upper_warning_limit, - &pad->upper_alarm_limit); + dbGetAlarmLimits(&prec->outa + linkNumber, + &pad->lower_alarm_limit, + &pad->lower_warning_limit, + &pad->upper_warning_limit, + &pad->upper_alarm_limit); return 0; } recGblGetAlarmDouble(paddr, pad); diff --git a/modules/database/src/std/rec/calcRecord.c b/modules/database/src/std/rec/calcRecord.c index 41caf35b0..4467c7080 100644 --- a/modules/database/src/std/rec/calcRecord.c +++ b/modules/database/src/std/rec/calcRecord.c @@ -166,16 +166,6 @@ static long get_linkNumber(int fieldIndex) { return -1; } -#define do_recursion_safe(func, plink, ...) \ -do { \ - dbScanLock((dbCommon*)prec); \ - DBLINK link = *(plink); \ - (plink)->lset = NULL; \ - func(&link, __VA_ARGS__); \ - (plink)->lset = link.lset; \ - dbScanUnlock((dbCommon*)prec); \ -} while(0) - static long get_units(DBADDR *paddr, char *units) { calcRecord *prec = (calcRecord *)paddr->precord; @@ -184,7 +174,7 @@ static long get_units(DBADDR *paddr, char *units) if(paddr->pfldDes->field_type == DBF_DOUBLE) { linkNumber = get_linkNumber(dbGetFieldIndex(paddr)); if (linkNumber >= 0) - do_recursion_safe(dbGetUnits, &prec->inpa + linkNumber, units, DB_UNITS_SIZE); + dbGetUnits(&prec->inpa + linkNumber, units, DB_UNITS_SIZE); else strncpy(units,prec->egu,DB_UNITS_SIZE); } @@ -203,10 +193,10 @@ static long get_precision(const DBADDR *paddr, long *pprecision) linkNumber = get_linkNumber(fieldIndex); if (linkNumber >= 0) { - long status; short precision; - do_recursion_safe(status = dbGetPrecision, &prec->inpa + linkNumber, &precision); - if (status == 0) *pprecision = precision; + + if (dbGetPrecision(&prec->inpa + linkNumber, &precision) == 0) + *pprecision = precision; } else recGblGetPrec(paddr, pprecision); return 0; @@ -232,11 +222,11 @@ static long get_graphic_double(DBADDR *paddr, struct dbr_grDouble *pgd) break; default: linkNumber = get_linkNumber(fieldIndex); - if (linkNumber >= 0) - do_recursion_safe(dbGetGraphicLimits, &prec->inpa + linkNumber, - &pgd->lower_disp_limit, - &pgd->upper_disp_limit); - else + if (linkNumber >= 0) { + dbGetGraphicLimits(&prec->inpa + linkNumber, + &pgd->lower_disp_limit, + &pgd->upper_disp_limit); + } else recGblGetGraphicDouble(paddr,pgd); } return 0; @@ -277,13 +267,13 @@ static long get_alarm_double(DBADDR *paddr, struct dbr_alDouble *pad) pad->upper_alarm_limit = prec->hhsv ? prec->hihi : epicsNAN; } else { linkNumber = get_linkNumber(fieldIndex); - if (linkNumber >= 0) - do_recursion_safe(dbGetAlarmLimits, &prec->inpa + linkNumber, - &pad->lower_alarm_limit, - &pad->lower_warning_limit, - &pad->upper_warning_limit, - &pad->upper_alarm_limit); - else + if (linkNumber >= 0) { + dbGetAlarmLimits(&prec->inpa + linkNumber, + &pad->lower_alarm_limit, + &pad->lower_warning_limit, + &pad->upper_warning_limit, + &pad->upper_alarm_limit); + } else recGblGetAlarmDouble(paddr, pad); } return 0; diff --git a/modules/database/src/std/rec/calcoutRecord.c b/modules/database/src/std/rec/calcoutRecord.c index 8a474f4e8..319994596 100644 --- a/modules/database/src/std/rec/calcoutRecord.c +++ b/modules/database/src/std/rec/calcoutRecord.c @@ -413,16 +413,6 @@ static long get_linkNumber(int fieldIndex) { return -1; } -#define do_recursion_safe(func, plink, ...) \ -do { \ - dbScanLock((dbCommon*)prec); \ - DBLINK link = *(plink); \ - (plink)->lset = NULL; \ - func(&link, __VA_ARGS__); \ - (plink)->lset = link.lset; \ - dbScanUnlock((dbCommon*)prec); \ -} while(0) - static long get_units(DBADDR *paddr, char *units) { calcoutRecord *prec = (calcoutRecord *)paddr->precord; @@ -435,9 +425,9 @@ static long get_units(DBADDR *paddr, char *units) } if(paddr->pfldDes->field_type == DBF_DOUBLE) { - linkNumber = get_linkNumber(fieldIndex); + linkNumber = get_linkNumber(dbGetFieldIndex(paddr)); if (linkNumber >= 0) - do_recursion_safe(dbGetUnits, &prec->inpa + linkNumber, units, DB_UNITS_SIZE); + dbGetUnits(&prec->inpa + linkNumber, units, DB_UNITS_SIZE); else strncpy(units,prec->egu,DB_UNITS_SIZE); } @@ -461,10 +451,10 @@ static long get_precision(const DBADDR *paddr, long *pprecision) linkNumber = get_linkNumber(fieldIndex); if (linkNumber >= 0) { - long status; short precision; - do_recursion_safe(status = dbGetPrecision, &prec->inpa + linkNumber, &precision); - if (status == 0) *pprecision = precision; + + if (dbGetPrecision(&prec->inpa + linkNumber, &precision) == 0) + *pprecision = precision; } else recGblGetPrec(paddr, pprecision); return 0; @@ -494,11 +484,11 @@ static long get_graphic_double(DBADDR *paddr, struct dbr_grDouble *pgd) break; default: linkNumber = get_linkNumber(fieldIndex); - if (linkNumber >= 0) - do_recursion_safe(dbGetGraphicLimits, &prec->inpa + linkNumber, - &pgd->lower_disp_limit, - &pgd->upper_disp_limit); - else + if (linkNumber >= 0) { + dbGetGraphicLimits(&prec->inpa + linkNumber, + &pgd->lower_disp_limit, + &pgd->upper_disp_limit); + } else recGblGetGraphicDouble(paddr,pgd); } return 0; @@ -543,13 +533,13 @@ static long get_alarm_double(DBADDR *paddr, struct dbr_alDouble *pad) pad->lower_alarm_limit = prec->llsv ? prec->lolo : epicsNAN; } else { linkNumber = get_linkNumber(fieldIndex); - if (linkNumber >= 0) - do_recursion_safe(dbGetAlarmLimits, &prec->inpa + linkNumber, - &pad->lower_alarm_limit, - &pad->lower_warning_limit, - &pad->upper_warning_limit, - &pad->upper_alarm_limit); - else + if (linkNumber >= 0) { + dbGetAlarmLimits(&prec->inpa + linkNumber, + &pad->lower_alarm_limit, + &pad->lower_warning_limit, + &pad->upper_warning_limit, + &pad->upper_alarm_limit); + } else recGblGetAlarmDouble(paddr, pad); } return 0; diff --git a/modules/database/src/std/rec/seqRecord.c b/modules/database/src/std/rec/seqRecord.c index 4311e3c50..cd6212da1 100644 --- a/modules/database/src/std/rec/seqRecord.c +++ b/modules/database/src/std/rec/seqRecord.c @@ -279,49 +279,39 @@ static void processCallback(epicsCallback *arg) #define get_dol(prec, fieldOffset) \ &((linkGrp *) &prec->dly0)[fieldOffset >> 2].dol -#define do_recursion_safe(func, plink, ...) \ -do { \ - dbScanLock((dbCommon*)prec); \ - DBLINK link = *(plink); \ - (plink)->lset = NULL; \ - func(&link, __VA_ARGS__); \ - (plink)->lset = link.lset; \ - dbScanUnlock((dbCommon*)prec); \ -} while(0) - static long get_units(DBADDR *paddr, char *units) { seqRecord *prec = (seqRecord *) paddr->precord; - int fieldOffset = dbGetFieldIndex(paddr) - indexof(DLY0); + int fieldOffset = dbGetFieldIndex(paddr) - indexof(DLY1); if (fieldOffset >= 0) - switch (fieldOffset & 3) { + switch (fieldOffset & 2) { case 0: /* DLYn */ strcpy(units, "s"); break; case 2: /* DOn */ - do_recursion_safe(dbGetUnits, get_dol(prec, fieldOffset), - units, DB_UNITS_SIZE); - } + dbGetUnits(get_dol(prec, fieldOffset), + units, DB_UNITS_SIZE); + } return 0; } static long get_precision(const DBADDR *paddr, long *pprecision) { seqRecord *prec = (seqRecord *) paddr->precord; - long status; - int fieldOffset = dbGetFieldIndex(paddr) - indexof(DLY0); + int fieldOffset = dbGetFieldIndex(paddr) - indexof(DLY1); short precision; if (fieldOffset >= 0) - switch (fieldOffset & 3) { + switch (fieldOffset & 2) { case 0: /* DLYn */ *pprecision = seqDLYprecision; return 0; case 2: /* DOn */ - do_recursion_safe(status = dbGetPrecision, get_dol(prec, fieldOffset), &precision); - if (status == 0) *pprecision = precision; - return 0; + if (dbGetPrecision(get_dol(prec, fieldOffset), &precision) == 0) { + *pprecision = precision; + return 0; + } } *pprecision = prec->prec; recGblGetPrec(paddr, pprecision); @@ -331,18 +321,18 @@ static long get_precision(const DBADDR *paddr, long *pprecision) static long get_graphic_double(DBADDR *paddr, struct dbr_grDouble *pgd) { seqRecord *prec = (seqRecord *) paddr->precord; - int fieldOffset = dbGetFieldIndex(paddr) - indexof(DLY0); + int fieldOffset = dbGetFieldIndex(paddr) - indexof(DLY1); if (fieldOffset >= 0) - switch (fieldOffset & 3) { + switch (fieldOffset & 2) { case 0: /* DLYn */ pgd->lower_disp_limit = 0.0; - pgd->upper_disp_limit = 10.0; + pgd->lower_disp_limit = 10.0; return 0; case 2: /* DOn */ - do_recursion_safe(dbGetGraphicLimits, get_dol(prec, fieldOffset), - &pgd->lower_disp_limit, - &pgd->upper_disp_limit); + dbGetGraphicLimits(get_dol(prec, fieldOffset), + &pgd->lower_disp_limit, + &pgd->upper_disp_limit); return 0; } recGblGetGraphicDouble(paddr, pgd); @@ -351,9 +341,9 @@ static long get_graphic_double(DBADDR *paddr, struct dbr_grDouble *pgd) static long get_control_double(DBADDR *paddr, struct dbr_ctrlDouble *pcd) { - int fieldOffset = dbGetFieldIndex(paddr) - indexof(DLY0); + int fieldOffset = dbGetFieldIndex(paddr) - indexof(DLY1); - if (fieldOffset >= 0 && (fieldOffset & 3) == 0) { /* DLYn */ + if (fieldOffset >= 0 && (fieldOffset & 2) == 0) { /* DLYn */ pcd->lower_ctrl_limit = 0.0; pcd->upper_ctrl_limit = seqDLYlimit; } @@ -365,12 +355,12 @@ static long get_control_double(DBADDR *paddr, struct dbr_ctrlDouble *pcd) static long get_alarm_double(DBADDR *paddr, struct dbr_alDouble *pad) { seqRecord *prec = (seqRecord *) paddr->precord; - int fieldOffset = dbGetFieldIndex(paddr) - indexof(DLY0); + int fieldOffset = dbGetFieldIndex(paddr) - indexof(DLY1); - if (fieldOffset >= 0 && (fieldOffset & 3) == 2) /* DOn */ - do_recursion_safe(dbGetAlarmLimits, get_dol(prec, fieldOffset), - &pad->lower_alarm_limit, &pad->lower_warning_limit, - &pad->upper_warning_limit, &pad->upper_alarm_limit); + if (fieldOffset >= 0 && (fieldOffset & 2) == 2) /* DOn */ + dbGetAlarmLimits(get_dol(prec, fieldOffset), + &pad->lower_alarm_limit, &pad->lower_warning_limit, + &pad->upper_warning_limit, &pad->upper_alarm_limit); else recGblGetAlarmDouble(paddr, pad); return 0; diff --git a/modules/database/src/std/rec/subRecord.c b/modules/database/src/std/rec/subRecord.c index 7fd2d5c23..1ef3af3de 100644 --- a/modules/database/src/std/rec/subRecord.c +++ b/modules/database/src/std/rec/subRecord.c @@ -201,16 +201,6 @@ static long get_linkNumber(int fieldIndex) { return -1; } -#define do_recursion_safe(func, plink, ...) \ -do { \ - dbScanLock((dbCommon*)prec); \ - DBLINK link = *(plink); \ - (plink)->lset = NULL; \ - func(&link, __VA_ARGS__); \ - (plink)->lset = link.lset; \ - dbScanUnlock((dbCommon*)prec); \ -} while(0) - static long get_units(DBADDR *paddr, char *units) { subRecord *prec = (subRecord *)paddr->precord; @@ -219,7 +209,7 @@ static long get_units(DBADDR *paddr, char *units) if(paddr->pfldDes->field_type == DBF_DOUBLE) { linkNumber = get_linkNumber(dbGetFieldIndex(paddr)); if (linkNumber >= 0) - do_recursion_safe(dbGetUnits, &prec->inpa + linkNumber, units, DB_UNITS_SIZE); + dbGetUnits(&prec->inpa + linkNumber, units, DB_UNITS_SIZE); else strncpy(units,prec->egu,DB_UNITS_SIZE); } @@ -238,10 +228,10 @@ static long get_precision(const DBADDR *paddr, long *pprecision) linkNumber = get_linkNumber(fieldIndex); if (linkNumber >= 0) { - long status; short precision; - do_recursion_safe(status = dbGetPrecision, &prec->inpa + linkNumber, &precision); - if (status == 0) *pprecision = precision; + + if (dbGetPrecision(&prec->inpa + linkNumber, &precision) == 0) + *pprecision = precision; } else recGblGetPrec(paddr, pprecision); return 0; @@ -267,11 +257,11 @@ static long get_graphic_double(DBADDR *paddr, struct dbr_grDouble *pgd) break; default: linkNumber = get_linkNumber(fieldIndex); - if (linkNumber >= 0) - do_recursion_safe(dbGetGraphicLimits, &prec->inpa + linkNumber, - &pgd->lower_disp_limit, - &pgd->upper_disp_limit); - else + if (linkNumber >= 0) { + dbGetGraphicLimits(&prec->inpa + linkNumber, + &pgd->lower_disp_limit, + &pgd->upper_disp_limit); + } else recGblGetGraphicDouble(paddr,pgd); } return 0; @@ -312,14 +302,14 @@ static long get_alarm_double(DBADDR *paddr, struct dbr_alDouble *pad) pad->lower_alarm_limit = prec->llsv ? prec->lolo : epicsNAN; } else { linkNumber = get_linkNumber(fieldIndex); - if (linkNumber >= 0) - do_recursion_safe(dbGetAlarmLimits, &prec->inpa + linkNumber, - &pad->lower_alarm_limit, - &pad->lower_warning_limit, - &pad->upper_warning_limit, - &pad->upper_alarm_limit); - else - recGblGetAlarmDouble(paddr, pad); + if (linkNumber >= 0) { + dbGetAlarmLimits(&prec->inpa + linkNumber, + &pad->lower_alarm_limit, + &pad->lower_warning_limit, + &pad->upper_warning_limit, + &pad->upper_alarm_limit); + } else + recGblGetAlarmDouble(paddr, pad); } return 0; }