diff --git a/src/catools/caget.c b/src/catools/caget.c index f29ff011a..5991a1152 100644 --- a/src/catools/caget.c +++ b/src/catools/caget.c @@ -167,11 +167,14 @@ int caget (pv *pvs, int nPvs, RequestT request, OutputT format, } } /* Adjust array count */ - if (reqElems == 0 || pvs[n].nElems < reqElems) - reqElems = pvs[n].nElems; - /* Remember dbrType and reqElems */ + if (reqElems == 0 || pvs[n].nElems < reqElems){ + pvs[n].reqElems = pvs[n].nElems; /* Use full number of points */ + } else { + pvs[n].reqElems = reqElems; /* Limit to specified number */ + } + + /* Remember dbrType */ pvs[n].dbrType = dbrType; - pvs[n].reqElems = reqElems; /* Issue CA request */ /* ---------------- */ @@ -183,15 +186,15 @@ int caget (pv *pvs, int nPvs, RequestT request, OutputT format, if (request == callback) { /* Event handler will allocate value */ result = ca_array_get_callback(dbrType, - reqElems, + pvs[n].reqElems, pvs[n].chid, event_handler, (void*)&pvs[n]); } else { /* Allocate value structure */ - pvs[n].value = calloc(1, dbr_size_n(dbrType, reqElems)); + pvs[n].value = calloc(1, dbr_size_n(dbrType, pvs[n].reqElems)); result = ca_array_get(dbrType, - reqElems, + pvs[n].reqElems, pvs[n].chid, pvs[n].value); } diff --git a/src/catools/camonitor.c b/src/catools/camonitor.c index 0fbf8cd01..c9ae30322 100644 --- a/src/catools/camonitor.c +++ b/src/catools/camonitor.c @@ -131,11 +131,14 @@ void connection_handler ( struct connection_handler_args args ) dbrType = DBR_TIME_STRING; } /* Adjust array count */ - if (reqElems == 0 || ppv->nElems < reqElems) - reqElems = ppv->nElems; - /* Remember dbrType and reqElems */ + if (reqElems == 0 || ppv->nElems < reqElems){ + ppv->reqElems = ppv->nElems; /* Use full number of points */ + } else { + ppv->reqElems = reqElems; /* Limit to specified number */ + } + + /* Remember dbrType */ ppv->dbrType = dbrType; - ppv->reqElems = reqElems; ppv->onceConnected = 1; nConn++; @@ -144,10 +147,10 @@ void connection_handler ( struct connection_handler_args args ) /* install monitor once with first connect */ if ( ! ppv->value ) { /* Allocate value structure */ - ppv->value = calloc(1, dbr_size_n(dbrType, reqElems)); + ppv->value = calloc(1, dbr_size_n(dbrType, ppv->reqElems)); if ( ppv->value ) { ppv->status = ca_create_subscription(dbrType, - reqElems, + ppv->reqElems, ppv->chid, eventMask, event_handler,