diff --git a/modules/database/src/ioc/db/dbAccess.c b/modules/database/src/ioc/db/dbAccess.c index f395e2fb9..27fc2d3f0 100644 --- a/modules/database/src/ioc/db/dbAccess.c +++ b/modules/database/src/ioc/db/dbAccess.c @@ -1325,7 +1325,6 @@ long dbPut(DBADDR *paddr, short dbrType, void *pfieldsave = paddr->pfield; rset *prset = dbGetRset(paddr); long status = 0; - long offset; dbFldDes *pfldDes; int isValueField; @@ -1349,20 +1348,25 @@ long dbPut(DBADDR *paddr, short dbrType, if (status) return status; } - if (paddr->pfldDes->special == SPC_DBADDR && - prset && prset->get_array_info) { - long dummy; + if (nRequest>1 || paddr->pfldDes->special == SPC_DBADDR) { + long offset = 0; + if (paddr->pfldDes->special == SPC_DBADDR && + prset && prset->get_array_info) { + long dummy; - status = prset->get_array_info(paddr, &dummy, &offset); - /* paddr->pfield may be modified */ - if (status) goto done; + status = prset->get_array_info(paddr, &dummy, &offset); + /* paddr->pfield may be modified */ + if (status) goto done; + } if (no_elements < nRequest) nRequest = no_elements; status = dbPutConvertRoutine[dbrType][field_type](paddr, pbuffer, nRequest, no_elements, offset); /* update array info */ - if (!status && prset->put_array_info) + if (!status && paddr->pfldDes->special == SPC_DBADDR && + prset && prset->put_array_info) { status = prset->put_array_info(paddr, nRequest); + } } else { if (nRequest < 1) { recGblSetSevr(precord, LINK_ALARM, INVALID_ALARM);