EPICS Controls Argonne National Laboratory

Experimental Physics and
Industrial Control System

2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  <20202021  2022  2023  2024  Index 2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  <20202021  2022  2023  2024 
<== Date ==> <== Thread ==>

Subject: [Bug 1881563] Re: Empty arrays have undefined behavior
From: Dirk Zimoch via Core-talk <core-talk at aps.anl.gov>
To: core-talk at aps.anl.gov
Date: Wed, 17 Jun 2020 14:34:50 -0000
The change is to LINK/INVALID alarm. The value is not updated. That was
the case before, it just was 0 initially.

** Description changed:

  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.
+ <del>reliably reads the value 0</del> does not change its value (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.

** Description changed:

  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)
- <del>reliably reads the value 0</del> does not change its value (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.
+ (with OMSL closed_loop) from an empty array (aai, aao or waveform) does
+ not change its value and does not show an alarm (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.

-- 
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)
  does not change its value and does not show an alarm (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: [Bug 1881563] Re: Empty arrays have undefined behavior Ben Franksen via Core-talk
Next: Build failed: EPICS Base 7 base-7.0-31 AppVeyor via Core-talk
Index: 2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  <20202021  2022  2023  2024 
Navigate by Thread:
Prev: [Bug 1881563] Re: Empty arrays have undefined behavior Ben Franksen via Core-talk
Next: [Bug 1881563] Re: Empty arrays have undefined behavior mdavidsaver via Core-talk
Index: 2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  <20202021  2022  2023  2024 
ANJ, 18 Jun 2020 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·