Merge ~bhill/epics-base:ca-sizes-in-error-msgs into ~epics-core/epics-base/+git/epics-base:3.16

Proposed by Bruce Hill
Status: Rejected
Rejected by: Andrew Johnson
Proposed branch: ~bhill/epics-base:ca-sizes-in-error-msgs
Merge into: ~epics-core/epics-base/+git/epics-base:3.16
Diff against target: 41 lines (+9/-4)
1 file modified
src/ca/client/tcpiiu.cpp (+9/-4)
Reviewer Review Type Date Requested Status
Andrew Johnson Disapprove
Review via email: mp+341084@code.launchpad.net

Description of the change

Modify CA error msgs re EPICS_CA_MAX_ARRAY_BYTES to include sizes.

To post a comment you must log in.
Revision history for this message
Andrew Johnson (anj) wrote :

Core Meeting: The conditions that trigger these error messages can no longer be fixed by changing MAX_ARRAY_BYTES in 3.16 and later, where that variable is no longer used to set the max buffer size.

review: Disapprove

Unmerged commits

852fb8f... by Bruce Hill

Modify CA error msgs re EPICS_CA_MAX_ARRAY_BYTES to include sizes.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/src/ca/client/tcpiiu.cpp b/src/ca/client/tcpiiu.cpp
2index 045f8d5..4f9c6c9 100644
3--- a/src/ca/client/tcpiiu.cpp
4+++ b/src/ca/client/tcpiiu.cpp
5@@ -1468,9 +1468,10 @@ void tcpiiu::readNotifyRequest ( epicsGuard < epicsMutex > & guard,
6 else {
7 maxBytes = MAX_TCP;
8 }
9- arrayElementCount maxElem =
10- ( maxBytes - dbr_size[dataType] ) / dbr_value_size[dataType];
11+ arrayElementCount elemSize = dbr_value_size[dataType];
12+ arrayElementCount maxElem = ( maxBytes - dbr_size[dataType] ) / elemSize;
13 if ( nElem > maxElem ) {
14+ errlogPrintf( "CA Read Error: data size=%lu, max=%lu\n", nElem * elemSize, maxElem * elemSize );
15 throw cacChannel::msgBodyCacheTooSmall ();
16 }
17 if (nElem == 0 && !CA_V413(this->minorProtocolVersion))
18@@ -1581,8 +1582,10 @@ void tcpiiu::subscriptionRequest (
19 }
20 unsigned dataType = subscr.getType ( guard );
21 // data type bounds checked when sunscription created
22- arrayElementCount maxElem = ( maxBytes - dbr_size[dataType] ) / dbr_value_size[dataType];
23+ arrayElementCount elemSize = dbr_value_size[dataType];
24+ arrayElementCount maxElem = ( maxBytes - dbr_size[dataType] ) / elemSize;
25 if ( nElem > maxElem ) {
26+ errlogPrintf( "CA Subscribe Error: data size=%lu, max=%lu\n", nElem * elemSize, maxElem * elemSize );
27 throw cacChannel::msgBodyCacheTooSmall ();
28 }
29 comQueSendMsgMinder minder ( this->sendQue, guard );
30@@ -1628,8 +1631,10 @@ void tcpiiu::subscriptionUpdateRequest (
31 }
32 unsigned dataType = subscr.getType ( guard );
33 // data type bounds checked when subscription constructed
34- arrayElementCount maxElem = ( maxBytes - dbr_size[dataType] ) / dbr_value_size[dataType];
35+ arrayElementCount elemSize = dbr_value_size[dataType];
36+ arrayElementCount maxElem = ( maxBytes - dbr_size[dataType] ) / elemSize;
37 if ( nElem > maxElem ) {
38+ errlogPrintf( "CA Subscription Update Error: data size=%lu, max=%lu\n", nElem * elemSize, maxElem * elemSize );
39 throw cacChannel::msgBodyCacheTooSmall ();
40 }
41 comQueSendMsgMinder minder ( this->sendQue, guard );

Subscribers

People subscribed via source and target branches