diff --git a/src/std/dev/devAiSoftCallback.c b/src/std/dev/devAiSoftCallback.c index ee73b0b44..6ed92e5d6 100644 --- a/src/std/dev/devAiSoftCallback.c +++ b/src/std/dev/devAiSoftCallback.c @@ -33,8 +33,9 @@ #define GET_OPTIONS (DBR_STATUS | DBR_TIME) typedef struct devPvt { - processNotify *ppn; - CALLBACK *pcallback; + DBADDR dbaddr; + processNotify pn; + CALLBACK callback; long options; int status; int smooth; @@ -67,7 +68,7 @@ static void doneCallback(processNotify *ppn) aiRecord *prec = (aiRecord *)ppn->usrPvt; devPvt *pdevPvt = (devPvt *)prec->dpvt; - callbackRequestProcessCallback(pdevPvt->pcallback, prec->prio, prec); + callbackRequestProcessCallback(&pdevPvt->callback, prec->prio, prec); } static long add_record(dbCommon *pcommon) @@ -87,11 +88,19 @@ static long add_record(dbCommon *pcommon) return S_db_badField; } - pdbaddr = callocMustSucceed(1, sizeof(*pdbaddr), - "devAiSoftCallback::add_record"); + pdevPvt = calloc(1, sizeof(*pdevPvt)); + if (!pdevPvt) { + status = S_db_noMemory; + recGblRecordError(status, (void *)prec, + "devAiSoftCallback (add_record) out of memory, calloc() failed"); + return status; + } + pdbaddr = &pdevPvt->dbaddr; + ppn = &pdevPvt->pn; + status = dbNameToAddr(plink->value.pv_link.pvname, pdbaddr); if (status) { - free(pdbaddr); + free(pdevPvt); recGblRecordError(status, (void *)prec, "devAiSoftCallback (add_record) link target not found"); return status; @@ -102,19 +111,12 @@ static long add_record(dbCommon *pcommon) plink->value.pv_link.pvt = pdbaddr; plink->value.pv_link.pvlMask &= pvlOptMsMode; /* Severity flags only */ - ppn = callocMustSucceed(1, sizeof(*ppn), - "devAiSoftCallback::add_record"); ppn->usrPvt = prec; ppn->paddr = pdbaddr; ppn->getCallback = getCallback; ppn->doneCallback = doneCallback; ppn->requestType = processGetRequest; - pdevPvt = callocMustSucceed(1, sizeof(*pdevPvt), - "devAiSoftCallback::add_record"); - pdevPvt->pcallback = callocMustSucceed(1, sizeof(CALLBACK), - "devAiSoftCallback::add_record"); - pdevPvt->ppn = ppn; pdevPvt->options = GET_OPTIONS; prec->dpvt = pdevPvt; @@ -129,11 +131,8 @@ static long del_record(dbCommon *pcommon) { if (plink->type == CONSTANT) return 0; assert(plink->type == PN_LINK); - dbNotifyCancel(pdevPvt->ppn); - free(pdevPvt->ppn); - free(pdevPvt->pcallback); + dbNotifyCancel(&pdevPvt->pn); free(pdevPvt); - free(plink->value.pv_link.pvt); plink->type = PV_LINK; plink->value.pv_link.pvt = NULL; @@ -178,7 +177,7 @@ static long read_ai(aiRecord *prec) return 2; if (!prec->pact) { - dbProcessNotify(pdevPvt->ppn); + dbProcessNotify(&pdevPvt->pn); prec->pact = TRUE; return 0; } diff --git a/src/std/dev/devBiSoftCallback.c b/src/std/dev/devBiSoftCallback.c index fff6f7017..d11350a2e 100644 --- a/src/std/dev/devBiSoftCallback.c +++ b/src/std/dev/devBiSoftCallback.c @@ -33,8 +33,9 @@ #define GET_OPTIONS (DBR_STATUS | DBR_TIME) typedef struct devPvt { - processNotify *ppn; - CALLBACK *pcallback; + DBADDR dbaddr; + processNotify pn; + CALLBACK callback; long options; int status; struct { @@ -66,7 +67,7 @@ static void doneCallback(processNotify *ppn) biRecord *prec = (biRecord *)ppn->usrPvt; devPvt *pdevPvt = (devPvt *)prec->dpvt; - callbackRequestProcessCallback(pdevPvt->pcallback, prec->prio, prec); + callbackRequestProcessCallback(&pdevPvt->callback, prec->prio, prec); } static long add_record(dbCommon *pcommon) @@ -86,11 +87,19 @@ static long add_record(dbCommon *pcommon) return S_db_badField; } - pdbaddr = callocMustSucceed(1, sizeof(*pdbaddr), - "devBiSoftCallback::add_record"); + pdevPvt = calloc(1, sizeof(*pdevPvt)); + if (!pdevPvt) { + status = S_db_noMemory; + recGblRecordError(status, (void *)prec, + "devBiSoftCallback (add_record) out of memory, calloc() failed"); + return status; + } + pdbaddr = &pdevPvt->dbaddr; + ppn = &pdevPvt->pn; + status = dbNameToAddr(plink->value.pv_link.pvname, pdbaddr); if (status) { - free(pdbaddr); + free(pdevPvt); recGblRecordError(status, (void *)prec, "devBiSoftCallback (add_record) link target not found"); return status; @@ -101,19 +110,12 @@ static long add_record(dbCommon *pcommon) plink->value.pv_link.pvt = pdbaddr; plink->value.pv_link.pvlMask &= pvlOptMsMode; /* Severity flags only */ - ppn = callocMustSucceed(1, sizeof(*ppn), - "devBiSoftCallback::add_record"); ppn->usrPvt = prec; ppn->paddr = pdbaddr; ppn->getCallback = getCallback; ppn->doneCallback = doneCallback; ppn->requestType = processGetRequest; - pdevPvt = callocMustSucceed(1, sizeof(*pdevPvt), - "devBiSoftCallback::add_record"); - pdevPvt->pcallback = callocMustSucceed(1, sizeof(CALLBACK), - "devBiSoftCallback::add_record"); - pdevPvt->ppn = ppn; pdevPvt->options = GET_OPTIONS; prec->dpvt = pdevPvt; @@ -128,11 +130,8 @@ static long del_record(dbCommon *pcommon) { if (plink->type == CONSTANT) return 0; assert(plink->type == PN_LINK); - dbNotifyCancel(pdevPvt->ppn); - free(pdevPvt->ppn); - free(pdevPvt->pcallback); + dbNotifyCancel(&pdevPvt->pn); free(pdevPvt); - free(plink->value.pv_link.pvt); plink->type = PV_LINK; plink->value.pv_link.pvt = NULL; @@ -177,7 +176,7 @@ static long read_bi(biRecord *prec) return 2; if (!prec->pact) { - dbProcessNotify(pdevPvt->ppn); + dbProcessNotify(&pdevPvt->pn); prec->pact = TRUE; return 0; } diff --git a/src/std/dev/devLiSoftCallback.c b/src/std/dev/devLiSoftCallback.c index 8c9e7a280..020ea7cf0 100644 --- a/src/std/dev/devLiSoftCallback.c +++ b/src/std/dev/devLiSoftCallback.c @@ -33,8 +33,9 @@ #define GET_OPTIONS (DBR_STATUS | DBR_TIME) typedef struct devPvt { - processNotify *ppn; - CALLBACK *pcallback; + DBADDR dbaddr; + processNotify pn; + CALLBACK callback; long options; int status; struct { @@ -66,7 +67,7 @@ static void doneCallback(processNotify *ppn) longinRecord *prec = (longinRecord *)ppn->usrPvt; devPvt *pdevPvt = (devPvt *)prec->dpvt; - callbackRequestProcessCallback(pdevPvt->pcallback, prec->prio, prec); + callbackRequestProcessCallback(&pdevPvt->callback, prec->prio, prec); } static long add_record(dbCommon *pcommon) @@ -86,11 +87,19 @@ static long add_record(dbCommon *pcommon) return S_db_badField; } - pdbaddr = callocMustSucceed(1, sizeof(*pdbaddr), - "devLiSoftCallback::add_record"); + pdevPvt = calloc(1, sizeof(*pdevPvt)); + if (!pdevPvt) { + status = S_db_noMemory; + recGblRecordError(status, (void *)prec, + "devLiSoftCallback (add_record) out of memory, calloc() failed"); + return status; + } + pdbaddr = &pdevPvt->dbaddr; + ppn = &pdevPvt->pn; + status = dbNameToAddr(plink->value.pv_link.pvname, pdbaddr); if (status) { - free(pdbaddr); + free(pdevPvt); recGblRecordError(status, (void *)prec, "devLiSoftCallback (init_record) linked record not found"); return status; @@ -101,19 +110,12 @@ static long add_record(dbCommon *pcommon) plink->value.pv_link.pvt = pdbaddr; plink->value.pv_link.pvlMask &= pvlOptMsMode; /* Severity flags only */ - ppn = callocMustSucceed(1, sizeof(*ppn), - "devLiSoftCallback::add_record"); ppn->usrPvt = prec; ppn->paddr = pdbaddr; ppn->getCallback = getCallback; ppn->doneCallback = doneCallback; ppn->requestType = processGetRequest; - pdevPvt = callocMustSucceed(1, sizeof(*pdevPvt), - "devLiSoftCallback::add_record"); - pdevPvt->pcallback = callocMustSucceed(1, sizeof(CALLBACK), - "devLiSoftCallback::add_record"); - pdevPvt->ppn = ppn; pdevPvt->options = GET_OPTIONS; prec->dpvt = pdevPvt; @@ -128,11 +130,8 @@ static long del_record(dbCommon *pcommon) { if (plink->type == CONSTANT) return 0; assert(plink->type == PN_LINK); - dbNotifyCancel(pdevPvt->ppn); - free(pdevPvt->ppn); - free(pdevPvt->pcallback); + dbNotifyCancel(&pdevPvt->pn); free(pdevPvt); - free(plink->value.pv_link.pvt); plink->type = PV_LINK; plink->value.pv_link.pvt = NULL; @@ -177,7 +176,7 @@ static long read_li(longinRecord *prec) return 0; if (!prec->pact) { - dbProcessNotify(pdevPvt->ppn); + dbProcessNotify(&pdevPvt->pn); prec->pact = TRUE; return 0; } diff --git a/src/std/dev/devMbbiDirectSoftCallback.c b/src/std/dev/devMbbiDirectSoftCallback.c index 1597a1e23..18994a3b7 100644 --- a/src/std/dev/devMbbiDirectSoftCallback.c +++ b/src/std/dev/devMbbiDirectSoftCallback.c @@ -33,8 +33,9 @@ #define GET_OPTIONS (DBR_STATUS | DBR_TIME) typedef struct devPvt { - processNotify *ppn; - CALLBACK *pcallback; + DBADDR dbaddr; + processNotify pn; + CALLBACK callback; long options; int status; struct { @@ -66,7 +67,7 @@ static void doneCallback(processNotify *ppn) mbbiDirectRecord *prec = (mbbiDirectRecord *)ppn->usrPvt; devPvt *pdevPvt = (devPvt *)prec->dpvt; - callbackRequestProcessCallback(pdevPvt->pcallback, prec->prio, prec); + callbackRequestProcessCallback(&pdevPvt->callback, prec->prio, prec); } static long add_record(dbCommon *pcommon) @@ -86,11 +87,19 @@ static long add_record(dbCommon *pcommon) return S_db_badField; } - pdbaddr = callocMustSucceed(1, sizeof(*pdbaddr), - "devMbbiDirectSoftCallback::add_record"); + pdevPvt = calloc(1, sizeof(*pdevPvt)); + if (!pdevPvt) { + status = S_db_noMemory; + recGblRecordError(status, (void *)prec, + "devMbbiDirectSoftCallback (add_record) out of memory, calloc() failed"); + return status; + } + pdbaddr = &pdevPvt->dbaddr; + ppn = &pdevPvt->pn; + status = dbNameToAddr(plink->value.pv_link.pvname, pdbaddr); if (status) { - free(pdbaddr); + free(pdevPvt); recGblRecordError(status,(void *)prec, "devMbbiDirectSoftCallback (add_record) linked record not found"); return status; @@ -101,19 +110,12 @@ static long add_record(dbCommon *pcommon) plink->value.pv_link.pvt = pdbaddr; plink->value.pv_link.pvlMask &= pvlOptMsMode; /* Severity flags only */ - ppn = callocMustSucceed(1, sizeof(*ppn), - "devMbbiDirectSoftCallback::add_record"); ppn->usrPvt = prec; ppn->paddr = pdbaddr; ppn->getCallback = getCallback; ppn->doneCallback = doneCallback; ppn->requestType = processGetRequest; - pdevPvt = callocMustSucceed(1, sizeof(*pdevPvt), - "devMbbiDirectSoftCallback::add_record"); - pdevPvt->pcallback = callocMustSucceed(1, sizeof(CALLBACK), - "devMbbiDirectSoftCallback::add_record"); - pdevPvt->ppn = ppn; pdevPvt->options = GET_OPTIONS; prec->dpvt = pdevPvt; @@ -128,11 +130,8 @@ static long del_record(dbCommon *pcommon) { if (plink->type == CONSTANT) return 0; assert(plink->type == PN_LINK); - dbNotifyCancel(pdevPvt->ppn); - free(pdevPvt->ppn); - free(pdevPvt->pcallback); + dbNotifyCancel(&pdevPvt->pn); free(pdevPvt); - free(plink->value.pv_link.pvt); plink->type = PV_LINK; plink->value.pv_link.pvt = NULL; @@ -177,7 +176,7 @@ static long read_mbbiDirect(mbbiDirectRecord *prec) return 2; if (!prec->pact) { - dbProcessNotify(pdevPvt->ppn); + dbProcessNotify(&pdevPvt->pn); prec->pact = TRUE; return 0; } diff --git a/src/std/dev/devMbbiSoftCallback.c b/src/std/dev/devMbbiSoftCallback.c index 1cf25640e..4cb89c0bd 100644 --- a/src/std/dev/devMbbiSoftCallback.c +++ b/src/std/dev/devMbbiSoftCallback.c @@ -33,8 +33,9 @@ #define GET_OPTIONS (DBR_STATUS | DBR_TIME) typedef struct devPvt { - processNotify *ppn; - CALLBACK *pcallback; + DBADDR dbaddr; + processNotify pn; + CALLBACK callback; long options; int status; struct { @@ -66,7 +67,7 @@ static void doneCallback(processNotify *ppn) mbbiRecord *prec = (mbbiRecord *)ppn->usrPvt; devPvt *pdevPvt = (devPvt *)prec->dpvt; - callbackRequestProcessCallback(pdevPvt->pcallback, prec->prio, prec); + callbackRequestProcessCallback(&pdevPvt->callback, prec->prio, prec); } static long add_record(dbCommon *pcommon) @@ -86,11 +87,19 @@ static long add_record(dbCommon *pcommon) return S_db_badField; } - pdbaddr = callocMustSucceed(1, sizeof(*pdbaddr), - "devMbbiSoftCallback::add_record"); + pdevPvt = calloc(1, sizeof(*pdevPvt)); + if (!pdevPvt) { + status = S_db_noMemory; + recGblRecordError(status, (void *)prec, + "devMbbiSoftCallback (add_record) out of memory, calloc() failed"); + return status; + } + pdbaddr = &pdevPvt->dbaddr; + ppn = &pdevPvt->pn; + status = dbNameToAddr(plink->value.pv_link.pvname, pdbaddr); if (status) { - free(pdbaddr); + free(pdevPvt); recGblRecordError(status, (void *)prec, "devMbbiSoftCallback (add_record) linked record not found"); return status; @@ -101,19 +110,12 @@ static long add_record(dbCommon *pcommon) plink->value.pv_link.pvt = pdbaddr; plink->value.pv_link.pvlMask &= pvlOptMsMode; /* Severity flags only */ - ppn = callocMustSucceed(1, sizeof(*ppn), - "devMbbiSoftCallback::add_record"); ppn->usrPvt = prec; ppn->paddr = pdbaddr; ppn->getCallback = getCallback; ppn->doneCallback = doneCallback; ppn->requestType = processGetRequest; - pdevPvt = callocMustSucceed(1, sizeof(*pdevPvt), - "devMbbiSoftCallback::add_record"); - pdevPvt->pcallback = callocMustSucceed(1, sizeof(CALLBACK), - "devMbbiSoftCallback::add_record"); - pdevPvt->ppn = ppn; pdevPvt->options = GET_OPTIONS; prec->dpvt = pdevPvt; @@ -128,11 +130,8 @@ static long del_record(dbCommon *pcommon) { if (plink->type == CONSTANT) return 0; assert(plink->type == PN_LINK); - dbNotifyCancel(pdevPvt->ppn); - free(pdevPvt->ppn); - free(pdevPvt->pcallback); + dbNotifyCancel(&pdevPvt->pn); free(pdevPvt); - free(plink->value.pv_link.pvt); plink->type = PV_LINK; plink->value.pv_link.pvt = NULL; @@ -177,7 +176,7 @@ static long read_mbbi(mbbiRecord *prec) return 2; if (!prec->pact) { - dbProcessNotify(pdevPvt->ppn); + dbProcessNotify(&pdevPvt->pn); prec->pact = TRUE; return 0; } diff --git a/src/std/dev/devSiSoftCallback.c b/src/std/dev/devSiSoftCallback.c index 18438a06d..14dfd6d1e 100644 --- a/src/std/dev/devSiSoftCallback.c +++ b/src/std/dev/devSiSoftCallback.c @@ -34,8 +34,9 @@ #define GET_OPTIONS (DBR_STATUS | DBR_TIME) typedef struct devPvt { - processNotify *ppn; - CALLBACK *pcallback; + DBADDR dbaddr; + processNotify pn; + CALLBACK callback; long options; int status; struct { @@ -67,10 +68,9 @@ static void doneCallback(processNotify *ppn) stringinRecord *prec = (stringinRecord *)ppn->usrPvt; devPvt *pdevPvt = (devPvt *)prec->dpvt; - callbackRequestProcessCallback(pdevPvt->pcallback, prec->prio, prec); + callbackRequestProcessCallback(&pdevPvt->callback, prec->prio, prec); } - static long add_record(dbCommon *pcommon) { stringinRecord *prec = (stringinRecord *)pcommon; @@ -88,11 +88,19 @@ static long add_record(dbCommon *pcommon) return S_db_badField; } - pdbaddr = callocMustSucceed(1, sizeof(*pdbaddr), - "devSiSoftCallback::add_record"); + pdevPvt = calloc(1, sizeof(*pdevPvt)); + if (!pdevPvt) { + status = S_db_noMemory; + recGblRecordError(status, (void *)prec, + "devSiSoftCallback (add_record) out of memory, calloc() failed"); + return status; + } + pdbaddr = &pdevPvt->dbaddr; + ppn = &pdevPvt->pn; + status = dbNameToAddr(plink->value.pv_link.pvname, pdbaddr); if (status) { - free(pdbaddr); + free(pdevPvt); recGblRecordError(status, (void *)prec, "devSiSoftCallback (add_record) linked record not found"); return status; @@ -103,19 +111,12 @@ static long add_record(dbCommon *pcommon) plink->value.pv_link.pvt = pdbaddr; plink->value.pv_link.pvlMask &= pvlOptMsMode; /* Severity flags only */ - ppn = callocMustSucceed(1, sizeof(*ppn), - "devSiSoftCallback::add_record"); ppn->usrPvt = prec; ppn->paddr = pdbaddr; ppn->getCallback = getCallback; ppn->doneCallback = doneCallback; ppn->requestType = processGetRequest; - pdevPvt = callocMustSucceed(1, sizeof(*pdevPvt), - "devSiSoftCallback::add_record"); - pdevPvt->pcallback = callocMustSucceed(1, sizeof(CALLBACK), - "devSiSoftCallback::add_record"); - pdevPvt->ppn = ppn; pdevPvt->options = GET_OPTIONS; prec->dpvt = pdevPvt; @@ -130,11 +131,8 @@ static long del_record(dbCommon *pcommon) { if (plink->type == CONSTANT) return 0; assert(plink->type == PN_LINK); - dbNotifyCancel(pdevPvt->ppn); - free(pdevPvt->ppn); - free(pdevPvt->pcallback); + dbNotifyCancel(&pdevPvt->pn); free(pdevPvt); - free(plink->value.pv_link.pvt); plink->type = PV_LINK; plink->value.pv_link.pvt = NULL; @@ -179,7 +177,7 @@ static long read_si(stringinRecord *prec) return 0; if (!prec->pact) { - dbProcessNotify(pdevPvt->ppn); + dbProcessNotify(&pdevPvt->pn); prec->pact = TRUE; return 0; }