I have now fixed:
# caget from empty arrays no longer returns nonense in first element but 0.
Warning: This will break calling dbr_size_n(TYPE,COUNT) with COUNT=0 when meaning 1. Base does not do this but 3rd pary software may.
# Array records reading empty arrays now report 0 bytes read (NORD or similar)
Fixed for aai, wavevorm, subArray, aSub. There may be more (compress?) but I have not checked yet.
# dbpf can now put arrays, including empty arrays
# caput can now put empty arrays
# scalar records reading from empty arrays via db link now get INVALID/LINK alarm.
Does not work yet for CA links.
I will be on vacation next week (from now on).
I am not creating a mrege request yet as this is not complete.
I took the change for 1-element-constant input links out of this branch
https://code.launchpad.net/~dirk.zimoch/epics-base/+git/epics-
base/+ref/fix_zero_size_arrays
--
You received this bug notification because you are a member of EPICS
Core Developers, which is subscribed to EPICS Base.
Matching subscriptions: epics-core-list-subscription
https://bugs.launchpad.net/bugs/1881563
Title:
Empty arrays have undefined behavior
Status in EPICS Base:
In Progress
Status in EPICS Base 7.0 series:
In Progress
Bug description:
The behavior of arrays with 0 elements is inconsistent and seemingly
undefined. I made the fllowing observations:
1. Reading empty arrays with caget shows NELM values, all 0 except for
the first which sometimes contains strange not-quite-random numbers
(see bug report 1242919). I have observed values 0, 2.122e-314,
2.50321e-308, 22, 18, 2.02038e-39, 1441792, 1179648, 3.05948e-308,
also depending on the -d option (DBR type) of caget.
2. Reading empty arrays with camonitor shows no values.
3. A scalar input record reading INP or scalar output record reading
DOL (with OMSL closed_loop) from an empty array (aai, aao or waveform)
reliably reads the value 0 (tested with ai, bi, mbbi, mbbiDirect,
longin, stringin, ao, bo, mbbo, mboDirect, longout, stringout). This
is true for DB links as well as for CA, CP and CPP links.
4. An array record (aai, waveform) reading from an empty array does
not change its current value. It does not change NORD, it does not
clear the arrays elements, it does not show an alarm.
5. Writing 0 elements to an array with caput -a fails whith "Invalid
element count requested".
My opinion on this behavior is as follows:
1. Reading arrays with caget should return NORD elements, not NELM
elements. But if we put this side, the additional elements should all
be set to 0. For empty arrays, this includes the the first one (index
0).
2. This is correct behavior.
3. This is consistent but questionable. Converting an empy array to a
scalar should fail as there is no value to convert. But that might
break existing dbs. In that case this behavior should be documented.
(Or is it?)
4. This behavior is buggy. The receiving record should update its NORD
to 0.
5. It should be possible to write an empty array.
To manage notifications about this bug go to:
https://bugs.launchpad.net/epics-base/+bug/1881563/+subscriptions
- References:
- [Bug 1881563] [NEW] empty arrays have undefined bahavior Dirk Zimoch via Core-talk
- Navigate by Date:
- Prev:
Re: BETA: ci-scripts 3.0 (feat. Windows on Travis) Ralph Lange via Core-talk
- Next:
RE: BETA: ci-scripts 3.0 (feat. Windows on Travis) Mark Rivers via Core-talk
- Index:
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
<2020>
2021
2022
2023
2024
- Navigate by Thread:
- Prev:
[Bug 1881563] Re: Empty arrays have undefined behavior Andrew Johnson via Core-talk
- Next:
[Bug 1881563] Re: Empty arrays have undefined behavior Ben Franksen via Core-talk
- Index:
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
<2020>
2021
2022
2023
2024
|