Most errors found with: codespell -L cach,thst,odly,aslo,parm,parms,inpu,ges,prset,pevent,ptd,pring,valu,noo,noe,ned,inout,ro,siz,froms,nd,fo,singl,sart,multy,tthe,allong,ment,inate,nodel,tring,alse,ture,thi,wille,numer Some more manually found (its -> it's) c++20: Do not use apostrophe (e.g. can't) in unquoted #error message
12 KiB
Release Notes
This document describes the changes that were included in the release of EPICS noted below. Release entries are now provided in a separate document for each version in the EPICS 7 series, but all are combined into a single page for publishing on the EPICS website. Separate release documents are also included from the older Base 3.15 and 3.16 series.
The external PVA submodules continue to maintain their own release notes files as before, but the entries describing changes in those submodules since version 7.0.5 have been copied into the associated EPICS Release Notes files, and will be added to new EPICS Release Notes published in the future.
EPICS Release 7.0.7
Doxygen Annotations
Thanks to several attendees at the 2022 EPICS Codeathon the number of header files with Doxygen annotations in the EPICS Core has again increased.
Build System updates
The top-level make targets uninstall, archuninstall and similar no
longer trigger the clean target which empties build directories, this
was a bug introduced in 7.0.5.
The make distclean target now properly deletes the generated file(s)
modules/RELEASE.<host>.local which are essential to build the external
submodules under the modules directory, and should not crash if the
build is configured with INSTALL_LOCATION pointing to an empty external directory (i.e. if you run make distclean twice in succession). When
INSTALL_LOCATION is set in the files configure/CONFIG_SITE or
configure/CONFIG_SITE.local the modules/RELEASE.<host>.local file
will now be regenerated in case the install path has been modified.
Note that passing INSTALL_LOCATION=<path> on the make command-line will
only work if you have run make distclean immediately beforehand, as the
modules/RELEASE.<host>.local file must be recreated using the new path.
Enhancements to capr.pl
The capr.pl script can now display records from older Base versions to
which fields have since been added, and shows long strings and array data
up to 10 elements, use the new -n option to increase that number.
The script is fully event-driven and prints all the field data received by
the end of the CA wait time (-w option which defaults to 2 seconds).
The interest level can now be specified using the -l option before the
PV name, and the new -D flag outputs debugging information.
Time Synchronization on VxWorks
VxWorks 6.9 can do its own OS clock time synchronization, if it has been
configured by setting SNTPC_PRIMARY_IPV4_ADDR. Since EPICS 3.15.3 the
IOC time support code has checked for the existence of the VxWorks time
synchronization task and avoided starting the EPICS one if the OS task
exists and the OS clock gives a "recent" time (i.e. after when EPICS was
compiled), unless the environment variable EPICS_TS_FORCE_NTPTIME is
also set. However a logic error in that code required the environment
variable to be set in more cases than it should have.
This error has been fixed and the IOC should work normally if the VxWorks
task is configured and running. The TIMEZONE value for the year is also
now calculated at initialization in this configuration, previously it was
only done when the IOC synchronzation task was used. Setting the above
environment variable will now cause the IOC support code to shut down the
VxWorks synchronization thread (if running) before starting the EPICS one.
Running the iocsh command ClockTime_Report now shows whether the VxWorks
task is running as well as giving the state of the IOC synchronization task.
The ClockTime_Init command can also be used to stop or restart the IOC
time synchronization task while the IOC is running, depending on the 0 or
1 parameter passed to it. This last change also applies to RTEMS IOCs.
Incompatible change to struct db_field_log
This change may cause channel filters which manipulate array updates to fail to compile.
To avoid potential speculation issues arising from overlapping code pointers
with data values, union dbfl_ref is modified to remove the dtor member.
dtor is moved out into the enclosing struct db_field_log.
So eg. using a db_field_log* p, the expression p->u.r.dtor must be
changed to (p)->dtor.
Fix undef ts on first camonitor update of NORD from waveformRecord
The order over operations when processing a waveformRecord is adjusted so that updates to NORD is posted with the correct timestamp.
Automatic COMMANDLINE_LIBRARY with newer compilers
When built with a compiler supporting __has_include<>, the presence
of a readline/readline.h header will be used to automatically determine
a default value for COMMANDLINE_LIBRARY.
Mingw builds with readline support now link -ltermcap instead of -lcurses.
This should not effect sites which set explicitly set COMMANDLINE_LIBRARY
as the only definition in Base now has the form COMMANDLINE_LIBRARY ?= ....
Perl CA support for empty long strings
The Perl CA bindings have been fixed to handle zero-length long string data properly.
aao gains OMSL and DOL
The aao record types gains the same DOL functionality found
in other output record types (ao, longout, etc.)
Server exports RSRV_SERVER_PORT
During iocInit(), the environment variable RSRV_SERVER_PORT is set
with the TCP port number selected.
dbdExpand.pl sorts all items by name
DBD files generated by the dbdExpand.pl script are now sorted within each
item type by the primary name of the item. The result should resolve any
issues with reproducible builds. No option is provided to prevent the sorting,
previously the order was essentially random and varied each time.
dbExpand.pl sorts records by name
Records are now output by this program in order, sorted by name. The new flag
-s can be given to output the records in the same order they were read in,
instead of sorting them.
Note that there are currently no build rules provided with Base which make use of this program.
Simulation Mode RAW Support for Output Record Types
SIMM=RAW support has been added for the relevant output record types (ao, bo, mbbo, mbboDirect). RAW simulation mode will have those records do the appropriate conversion and write RVAL to the location pointed to by SIOL.
Fixed leak from a non-EPICS thread
On some targets, if a thread not created by epicsThreadCreate*() directly
or indirectly calls an epicsThread*() function, a specific tracking struct
is allocated.
Prior to this release, on POSIX and WIN32 targets, this
struct would not be free()d, resulting in a memory leak.
This release fixed the leak on POSIX targets.
See the associated github issue 241 for WIN32 status.
Fixed leak from a non-EPICS thread
On some targets, if a thread not created by epicsThreadCreate*() directly
or indirectly calls an epicsThread*() function, a specific tracking struct
is allocated.
Prior to this release, on POSIX and WIN32 targets, this
allocation would not be free()d, resulting in a memory leak.
This release fixed the leak on POSIX and WIN32 targets (excluding MSVC before vs2012, and the WINE runtime).
Fixed leak from a non-EPICS thread
On some targets, if a thread not created by epicsThreadCreate*() directly
or indirectly calls an epicsThread*() function, a specific tracking struct
is allocated.
Prior to this release, on POSIX and WIN32 targets, this
struct would not be free()d, resulting in a memory leak.
This release fixed the leak on POSIX targets.
See the associated github issue 241 for WIN32 status.
Fix CHECK_RELEASE = WARN
This now works again, it was broken in 2019 (7.0.3.1) by an errant commit.
Document DISP as design-time field
The DISP field can be set to a non-zero value to prevent records being changed from outside the IOC (this is ancient behavior), but has never been documented as being usable at design-time (DCT=Yes in the Record Reference tables). This has now been changed.
Make epicsInt8 signed on all architectures
The epicsInt8 and thus DBF_CHAR types have always been unsigned on
architectures where char is unsigned, for example on many PowerPC CPU
architectures. This was counter-intuitive, and resulted in IOC behavior
differing between architectures when converting DBF_CHAR values into a
signed integer or floating point type.
WARNING: This fix may change behavior of existing databases on target
architectures with unsigned char (mainly PowerPC) when using input links to
read from CHAR arrays. Architectures with signed char (usually x86) should
be unaffected, although some compilers might generate new warnings.
Allow hexadecimal and octal numbers in hardware links
Several types of hardware links (VME_IO, CAMAC_IO, etc) now accept
hexadecimal and octal numbers. (Hexadecimal numbers had already been valid
up to EPICS R3.15.) This change may introduce incompatibilities when using
numbers with leading 0 as they will now be parsed as octal.
Fix embedded implementations of epicsEvent
Heinz Junkes provided a new implementation of the epicsEvent API suitable for
RTEMS Posix targets (RTEMS 5.1 and later). In review a few issues related to
overflow of timeout values surfaced in this and other embedded implementations,
and these were also been fixed in this Pull Request. The API documentation for
this and some other routines has also been updated.
Breakpoint Table Names
The names of breakpoint tables were made unnecessarily strict when DBD file
processing was moved to Perl for the 3.15 release series. Table names may now
contain the special characters _ - : ; . [ ] < > in addition
to letters and digits.
Fix for undefined in configure/RELEASE files
Prevents Use of uninitialized value warnings from convertRelease.pl.
Colorized Messages for errlog
Many internal error messages now emit ANSI escape sequences to highlight the words "ERROR" and "WARNING" in an attempt to make occurrences more noticeable during IOC startup.
The macros ERL_ERROR and ERL_WARNING are defined for external usage,
and expand as string constants. eg.
#include <errlog.h>
#ifndef ERL_ERROR
# define ERL_ERROR "ERROR"
#endif
void fn() {
...
errlogPrintf(ERL_ERROR ": something bad happens :(\n");
ANSI escapes are automatically removed from errlog output not destined
for a terminal. For example, for logClient, if stderr is redirected,
or if unsupported ($TERM not set, or Windows < 10).
dbnd filter pass through DBE_ALARM|DBE_PROPERTY
The dbnd server side filter now passes through alarm and property
change events, even when not exceeding the deadband.
Submodule updates
The pvData module was updated to version 8.0.5:
- Compatible changes
- Internal changes to use the YAJL API for generating JSON and JSON-5 output.
The pvAccess module was updated to version 7.1.6:
- Changes to caProvider
- Bug fix related to enum values.
- More internal changes to improve performance when connecting tens of thousands of CA channels.
- Several minor internal improvements.
The pva2pva module was updated to version 1.4.0:
- Bug Fixes
- Apply ACF when writing to atomic group
- Additions
- Add new "structure" to @ref qsrv_group_map_types
- Changes
- Add Access Security hooks for single and group writes.
- Enable "Async Soft Channel" for output links
- When built against Base 7.0.6.1, set timeStamp.userTag from UTAG field.
- Add DTYP="QSRV Set UTag" for longin, which sets UTAG=VAL.
The pvDatabase module was updated to version 4.7.0:
-
Added support for the whole structure (master field) server side plugins. The whole structure is identified as the
_string, and a pvRequest string that applies a plugin to it takes the form:field(_[XYZ=A:3;B:uniqueId])where
XYZis the name of a specific filter plugin that takes parametersAandBwith values3anduniqueIdrespectively.