1 # EPICS 7.0 Release Notes {#releasenotes}
3 These release notes describe changes that have been made since the previous
4 release of this series of EPICS Base. **Note that changes which were merged up
5 from commits to new releases in an older Base series are not described at the
6 top of this file but have entries that appear lower down, under the series to
7 which they were originally committed.** Thus it is important to read more than
8 just the first section to understand everything that has changed in each
11 The PVA submodules each have their own individual sets of release notes which
12 should also be read to understand what has changed since earlier releases.
14 **This version of EPICS has not been released yet.**
16 ## Changes made on the 7.0 branch since 7.0.5
18 <!-- Insert new items immediately below here ... -->
23 ## EPICS Release 7.0.5
25 ### Fix aai's Device Support Initialization
27 Krisztian Loki [reported](https://github.com/epics-base/epics-base/issues/97)
28 segfaults occurring when a Soft Channel aai record INP field was a DB link to
29 an array field of a compress record. This was caused by the aai record's
30 pass-0 device support initialization clashing with the semantics of the new
34 [has been modified](https://github.com/epics-base/epics-base/pull/114) to
35 allow the Soft Channel device support to request a pass-1 initialization
36 callback. See the Device Support section of the Array Analogue Input Record
37 Reference pages in this release for the API changes, which are fully backwards
38 compatible for existing aai device support.
40 ### Prevent default DTYPs from changing
42 [Kay Kasemir reported](https://bugs.launchpad.net/epics-base/+bug/1908305) that
43 it is possible to change the Base record type's default DTYP if a `device()`
44 entry is seen before the `recordtype()` definition to which it refers. The
45 default DTYP is the first device loaded, which is normally the `Soft Channel`
46 support from Base. A warning was being displayed by dbdExpand when a `device()`
47 entry was see first, but that was easily missed.
49 The DBD file parser in dbdExpand.pl has now been modified to make this an error,
50 although the registerRecordDeviceDriver.pl script will still accept `device()`
51 entries without having their `recordtype()` loaded since this is necessary to
52 compile device supports as loadable modules.
55 ### Priority inversion safe Posix mutexes
57 On Posix systems, epicsMutex now support priority inheritance if available.
58 The IOC needs to run with SCHED_FIFO engaged to use these.
59 Support for Posix implementations before POSIX.1-2001 (`_XOPEN_SOURCE < 500`,
60 glibc version < 2.3.3) has been dropped.
62 The IOC shell's `epicsMutexShowAll` command prints "PI is enabled" if both
63 libc and kernel support is present.
65 ### Fix for Periodic Scan threads hanging on Windows
67 Since 7.0.3.1 a Windows IOC could not run for more than 49.7 days; at that
68 time the periodic scan threads would stop processing. This issue should now
69 have been fixed and the Monotonic time functions on Windows should return
70 values which count at nanosecond resolution. However we have not waited 49.7
71 days to test the final software, so there is a small chance that it's still
74 This fixes [lauchpad bug #1896295](https://bugs.launchpad.net/bugs/1896295).
76 ### Support for Apple M1 (arm64) Processors
78 Thanks to Jeong Han Lee this release comes with build support for Apple's new
79 M1 CPUs running macOS, using the target name `darwin-aarch64`.
81 It should also be possible to build universal binaries containing code for
82 both the Intel and arm64 processors under either target name: In the
83 appropriate `configure/os/CONFIG_SITE.Common.darwin-*` file add the other
84 architecture class name to the `ARCH_CLASS` variable (after a space).
86 ### New String Comparison Routine `epicsStrSimilarity()`
88 The new `epicsStrSimilarity()` routine in epicsString.h uses a modified
89 Levenshtein distance to compare two strings, with a character case difference
90 being half the weight of a full substitution. The double return value falls in
91 the range 0.0 (identical) through 1.0 (no characters matching), or -1.0 for
92 error. This is used to provide a new "Did you mean ..." suggestion when a .db
93 file provides an invalid choice string for a `DBF_MENU` or `DBF_DEVICE` field.
95 ### Build System: New `VALID_BUILDS` type "Command"
97 Target architectures that support command-line programs that run the `main()`
98 routine can now be marked as such in their `VALID_BUILDS` definition. This
99 enables a new set of Makefile target variables `PROD_CMD` (similar to
100 `PROD_HOST`), `LIBRARY_CMD` (like `LIBRARY_HOST`, etc.), `LOADABLE_LIBRARY_CMD`,
101 `OBJS_CMD`, `SCRIPTS_CMD`, `TARGETS_CMD`, `TESTLIBRARY_CMD`, `TESTSCRIPTS_CMD`
102 and `TESTPROD_CMD`. The CA client tools and programs such as `caRepeater` are now built for all such targets (previously they were built for all targets except where the OS was VxWorks, RTEMS and iOS).
104 If you have created your own site-specific target architectures you may need to
105 update the `VALID_BUILDS` variable if it gets set in your locally added
106 `configure/os/CONFIG.Common.<arch>` files. This is usually only needed for
107 cross-compiled targets though since `CONFIG.Common.UnixCommon` sets it.
109 The other `VALID_BUILDS` types are "Host" for target architectures that can
110 compile and run their own programs (`PROD_HOST` etc.), and "Ioc" for targets
111 that can run IOCs (`PROD_IOC` etc.).
113 ### Support for JSON5
115 The YAJL parser and generator routines in libcom and in the IOC's dbStatic
116 parser now support the JSON5 standard. This adds various features to JSON
117 without altering the API for the code other than adding a new option to the
118 YAJL parser which can be used to disable JSON5 support if desired. The new
121 - The ability to handle numeric values `Infinity`, `-Infinity` and `NaN`.
122 - String values and map keys may be enclosed in single quotes `'`, inside which
123 the double-quote character `"` doesn't have to be escaped with a back-slash
124 `\`, although a single-quote character `'` (or apostrophy) must be escaped
125 inside a single-quoted string.
126 - Numbers may start with a plus sign, `+`.
127 - Integers may be expressed in hexadecimal with a leading `0x` or `0X`.
128 - Floating-point numbers may start or end with their decimal point `.`
129 (after the sign or before the exponent respectively if present).
130 - Map keys that match the regex `[A-Za-z_][A-Za-z_0-9]*` don't have to be
131 enclosed in quotes at all. The dbStatic parser adds `.+-` to the characters
132 allowed but will add quotes around such keys before passing them to YAJL.
133 - Arrays and maps allow a comma before the closing bracket/brace character.
134 - The YAJL parser will elide a backslash followed by a newline characters from
135 a string value. The dbStatic parser doesn't allow that however.
137 Code that must also compile against the older API can use the new C macro
138 `HAS_JSON5` to detect the new version. This macro is defined on including
139 either the `yajl_parse.h` or `yajl_gen.h` headers, which also provide the
140 new configuration options to turn on JSON5 support.
142 All APIs in the IOC that previously accepted JSON will now accept JSON5.
143 This includes JSON field modifiers (channel filters), JSON link addresses,
144 constant input link array values and database info-tag values. JSON values
145 that get parsed by the dbLoadRecords() routine are still more liberal than
146 the other uses as the ability to use unquoted strings that was called
147 "relaxed JSON" is still supported, whereas the JSON5 standard and the YAJL
148 parser only allow unquoted strings to be used for keys in a JSON map.
150 This also fixes [lauchpad bug #1714455](https://bugs.launchpad.net/bugs/1714455).
153 ### Character Escape Changes
155 - The libCom routines `epicsStrnRawFromEscaped()` and `dbTranslateEscape()`
156 declared in epicsString.h no longer accept octal escaped characters such as
158 - The routine `epicsStrnEscapedFromRaw()` now generates hex
159 excaped characters for unprintable characters such as `\x1f`.
160 - Hex escape character sequences `\xXX` must now contain exactly 2 hex digits.
161 - An escape sequence `\0` now generates a zero byte in the raw string, but the
162 other digits `1-9` should not appear after a back-slash.
164 These changes are to more closely follow the JSON5 standard, which doesn't
165 support octal character escapes or the `\a` (Bel, `\x07`) escape sequence.
167 ### Filters in database input links
169 Input database links can now use channel filters, it is not necessary to
170 make them CA links for the filters to work.
172 ### ai Soft Channel support
174 The Soft Channel device support for ai records now returns failure when
175 fetching the INP link fails.
177 ### Support for zero-length arrays
179 Several modifications have been made to properly support zero-length
180 array values inside the IOC and over Channel Access. Some of these changes
181 may affect external code that interfaces with the IOC, either directly or
182 over the CA client API so we recommend thorough testing of any external
183 code that handles array fields when upgrading to this release.
185 Since these changes affect the Channel Access client-side API they will
186 require rebuilding any CA Gateways against this version or Base to
187 properly handle zero-length arrays. The `caget`, `caput` and `camonitor`
188 client programs are known to work with empty arrays as long as they were
189 built with this or a later version of EPICS.
191 #### Change to the db_access.h `dbr_size_n(TYPE, COUNT)` macro
193 When called with COUNT=0 this macro no longer returns the number of bytes
194 required for a scalar (1 element) but for an empty array (0 elements).
195 Make sure code that uses this doesn't call it with COUNT=0 when it really
198 Note that the db_access.h header file is included by cadef.h so the change
199 can impact Channel Access client programs that use this macro.
201 #### Channel Access support for zero-length arrays
203 The `ca_array_put()` and `ca_array_put_callback()` routines now accept an
204 element count of zero, and will write a zero-length array to the PV if
205 possible. No error will be raised if the target is a scalar field though,
206 and the field's value will not be changed.
208 The `ca_array_get_callback()` and `ca_create_subscription()` routines
209 still accept a count of zero to mean fetch as many elements as the PV
212 Client programs should be prepared for the `count` fields of any
213 `struct event_handler_args` or `struct exception_handler_args` passed to
214 their callback routines to be zero.
218 The soft device support for the array records aai, waveform, and subArray
219 as well as the aSub record type now correctly report reading 0 elements
220 when getting an empty array from an input link.
222 #### Array support for dbpf
224 The dbpf command now accepts array values, including empty arrays, when
225 provided as a JSON string. This must be enclosed in quotes so the iocsh
226 argument parser sees the JSON as a single argument:
229 epics> dbpf wf10:i32 '[1, 2, 3, 4, 5]'
230 DBF_LONG[5]: 1 = 0x1 2 = 0x2 3 = 0x3 4 = 0x4 5 = 0x5
233 #### Reading empty arrays as scalar values
235 Record links that get a scalar value from an array that is currently
236 empty will cause the record that has the link field to be set to an
237 `INVALID/LINK` alarm status.
238 The record code must call `dbGetLink()` with `pnRequest=NULL` for it to
239 be recognized as a request for a scalar value though.
241 This changes the semantics of passing `pnRequest=NULL` to `dbGetLink()`,
242 which now behaves differently than passing it a pointer to a long integer
243 containing the value 1, which was previously equivalent.
244 The latter can successfully fetch a zero-element array without triggering
247 #### Writing empty arrays to scalar fields
249 Record links that put a zero-element array into a scalar field will now set
250 the target record to `INVALID/LINK` alarm without changing the field's value.
251 Previously the field was set to 0 in this case (with no alarm).
252 The target field must be marked as `special(SPC_DBADDR)` to be recognized
253 as an array field, and its record support must define a `put_array_info()`
256 ### Timestamp before processing output links
258 The record processing code for records with output links has been modified to
259 update the timestamp via recGblGetTimeStamp() _before_ processing the output
260 links. This ensures that other records which get processed via an output link
261 can use TSEL links to fetch the timestamp corresponding to the data processed
264 This change could result in a slightly earlier timestamp for records whose
265 output link is handled by a device driver, but only if the device driver does
266 not handle its own timestamping via TSE -2 and instead uses TSE 0 or TSE -1 to
267 get current time or best time, and the time spent in the device driver is
268 greater than your timestamp provider resolution. For these situations it is
269 recommended to set TSE to -2 and set the timestamp in the driver code.
271 ### Add registerAllRecordDeviceDrivers()
273 A new iocsh command `registerAllRecordDeviceDrivers` is provided and also
274 defined as a function in iocshRegisterCommon.h. This uses dynamic symbol
275 lookup with `epicsFindSymbol()` to perform the same function as a generated
276 `*_registerRecordDeviceDriver()` function. This allows for an alternative
277 approach to dynamic loading of support modules without code generation.
279 This feature is not intended for use by IOCs constructed using the standard
280 EPICS application build process and booted from a startup script in an iocBoot
281 subdirectory, although it might work in some of those cases — the
282 generated registerRecordDeviceDriver.cpp file is normally required to link
283 everything referred to in the DBD file into the IOC's executable. It also
284 won't work with some static build configurations, or if the symbol table has
285 been stripped from the executable.
287 ### Using a `{const:"string"}` to initialize an array of `DBF_CHAR`
289 It is now possible to use a JSON Const link with a string value to initialize
290 an aai or waveform record that has `FTVL` set to `CHAR` through the INP link.
291 The string length is not limited to 40 characters. This should also work for
292 aSub record inputs similarly configured as long strings.
295 record(waveform, "wf") {
298 field(INP, {const:"This is a waveform and more than 40 characters"})
302 ### RELEASE files may use `undefine`
304 GNUmake added the directive `undefine` in version 3.82 to allow variables to
305 be undefined. Support for this has been added to the EPICS Release file parser,
306 so `undefine` can now be used in configure/RELEASE files to unset variables.
310 ## EPICS Release 7.0.4.1
312 ### ARM Architecture Changes
314 Build configuration files for a new cross-build architecture `linux-aarch64`
315 have been added, and the targets `linux-arm_el` and `linux-arm_eb` removed.
316 The 64-bit ARM architecture target doesn't have build files for self-hosting
317 yet but they should be relatively easy to add, contributions welcome!
321 The following bugs/issues have fixes included in this release:
323 - [lp: 1884339](https://bugs.launchpad.net/epics-base/+bug/1884339),
324 Inaccessible CA servers on Windows
325 - [github: 83](https://github.com/epics-base/epics-base/issues/83)
326 osdTimeGetCurrent doesn't work for subprocess on macOS
327 - Recent Cygwin build problem with a missing `TCP_NODELAY` declaration.
329 ### Perl CA Bindings under Conda
331 Builds of the Perl CA bindings weren't working properly when the Perl
332 installation was from Conda. This release also fixed the capr.pl script
333 to handle the INT64 data types, and to be able to properly handle missing
334 fields, as happens if the IOC is running an older EPICS version for example.
336 ### epicsMessageQueue implementation on RTEMS
338 The implementation of the `epicsMessageQueue` used on RTEMS has switched from
339 the native RTEMS-specific one to the EPICS generic version, avoiding a bug
340 in the RTEMS Kernel message queue code.
342 ### Record Name Validation
344 Historically, there have been very few restrictions on which characters
345 may be present in record and alias names. Base 3.14.12.3 added a warning
346 for names containing space, single or double quote, period/dot, or
350 Bad character ' ' in record name "bad practice"
353 7.0.4.1 Turns this warning into an error, and adds a new warning
354 if a record name begins with a minus, plus, left square bracket,
355 or left curly bracket.
359 ## EPICS Release 7.0.4
363 The following launchpad bugs have fixes included in this release:
365 - [lp: 1812084](https://bugs.launchpad.net/bugs/1812084), Build failure on
367 - [lp: 1829919](https://bugs.launchpad.net/bugs/1829919), IOC segfaults when
368 calling dbLoadRecords after iocInit
369 - [lp: 1838792](https://bugs.launchpad.net/bugs/1838792), epicsCalc bit-wise
371 - [lp: 1853148](https://bugs.launchpad.net/bugs/1853148), mingw compiler
372 problem with printf/scanf formats
373 - [lp: 1852653](https://bugs.launchpad.net/bugs/1852653), USE_TYPED_DSET
374 incompatible with C++
375 - [lp: 1862328](https://bugs.launchpad.net/bugs/1862328), Race condition on
376 IOC start leaves rsrv unresponsive
377 - [lp: 1866651](https://bugs.launchpad.net/bugs/1866651), thread joinable race
378 - [lp: 1868486](https://bugs.launchpad.net/bugs/1868486), epicsMessageQueue
380 - [lp: 1868680](https://bugs.launchpad.net/bugs/1868680), Access Security file
381 reload (asInit) fails
383 ### \*_API macros in EPICS headers
385 Internally, the Com and ca libraries now express dllimport/export (Windows)
386 and symbol visibility (GCC) using library-specific macros (eg. `LIBCOM_API`)
387 instead of the macros `epicsShareFunc`, `epicsShareClass`, `epicsShareDef` etc.
388 that are defined in the `shareLib.h` header.
389 This change may affect some user code which uses the `epicsShare*` macros
390 without having explicitly included the `shareLib.h` header themselves.
391 Such code should be changed to include `shareLib.h` directly.
393 A new helper script `makeAPIheader.pl` and build rules to generate a
394 library-specific `*API.h` header file has been added. Run `makeAPIheader.pl -h`
395 for information on how to use this in your own applications, but note that the
396 resulting sources will not be able to be compiled using earlier versions of
399 ### IOCsh usage messages
401 At the iocShell prompt `help <cmd>` now prints a descriptive usage message
402 for many internal IOCsh commands in addition to the command parameters.
403 Try `help *` to see all commands, or a glob pattern such as `help db*` to see
406 External code may provide usage messages when registering commands using a
407 new `const char *usage` member of the `iocshFuncDef` structure.
408 The `iocsh.h` header also now defines a macro `IOCSHFUNCDEF_HAS_USAGE` which
409 can be used to detect Base versions that support this feature at compile-time.
411 ### Variable names in RELEASE files
413 `configure/RELEASE` files are parsed by both GNUmake and the `convertRelease.pl`
414 script. While GNUmake is quite relaxed about what characters may be used in a
415 RELEASE variable name, the `convertRelease.pl` script parser has only recognized
416 variable names that match the Perl regular expression `\w+`, i.e. upper and
417 lower-case letters, digits and underscore characters.
419 The script has been modified so now RELEASE variable names must start with a
420 letter or underscore, and be followed by any number of letters, digits,
421 underscore or hyphen characters, matching the regular expression
422 `[A-Za-z_][A-Za-z_0-9-]*`. The hyphen character `-` was not previously allowed
423 and if used would have prevented a build from finding include files and
424 libraries in any module using that in its RELEASE variable name.
426 This change does disallow names that start with a digit which used to be
427 allowed, but hopefully nobody has been relying on that ability. The regular
428 expression used for names can be found in the file `src/tools/EPICS/Release.pm`
429 and can be adjusted locally if necessary.
431 ### caRepeater /dev/null
433 On \*NIX targets caRepeater will now partially daemonize by redirecting
434 stdin/out/err to /dev/null. This prevents caRepeater from inheriting
435 the stdin/out of a process, like caget, which has spawned it in the
436 background. This has been known to cause problems in some cases when
437 caget is itself being run from a shell script.
439 caRepeater will now understand the `-v` argument to retain stdin/out/err
440 which may be necessary to see any error messages it may emit.
442 ### `state` record deprecated
444 IOCs now emit a warning when a database file containing the `state` record is
445 loaded. This record has been deprecated for a while and will be removed
446 beginning with EPICS 7.1. Consider using the `stringin` record instead.
448 ### Record types publish dset's
450 The record types in Base now define their device support entry table (DSET)
451 structures in the record header file. While still optional, developers of
452 external support modules are encouraged to start converting their code to use
453 the record's new definitions instead of the traditional approach of copying the
454 structure definitions into each source file that needs them. By following the
455 instructions below it is still possible for the converted code to build and
456 work with older Base releases.
458 This would also be a good time to modify the device support to use the type-safe
459 device support entry tables that were introduced in Base-3.16.2 -- see
460 [this entry below](#type-safe-device-and-driver-support-tables) for the
461 description of that change, which is also optional for now.
463 Look at the aiRecord for example. Near the top of the generated `aiRecord.h`
464 header file is a new section that declares the `aidset`:
467 /* Declare Device Support Entry Table */
469 typedef struct aidset {
471 long (*read_ai)(struct aiRecord *prec);
472 long (*special_linconv)(struct aiRecord *prec, int after);
477 Notice that the common members (`number`, `report()`, `init()`, `init_record()`
478 and `get_ioint_info()` don't appear directly but are included by embedding the
479 `dset common` member instead. This avoids the need to have separate definitions
480 of those members in each record dset, but does require those members to be
481 wrapped inside another set of braces `{}` when initializing the data structure
482 for the individual device supports. It also requires changes to code that
483 references those common members, but that code usually only appears inside the
484 record type implementation and very rarely in device supports.
486 An aiRecord device support that will only be built against this or later
487 versions of EPICS can now declare its dset like this:
491 { 6, NULL, NULL, init_record, NULL },
494 epicsExportAddress(dset, devAiSoft);
497 However most device support that is not built into EPICS itself will need to
498 remain compatible with older EPICS versions, which is why the ai record's header
499 file also declares the preprocessor macro `HAS_aidset`. This makes it easy to
500 define the `aidset` in the device support code when it's needed, and not when
501 it's provided in the header:
505 typedef struct aidset {
507 long (*read_ai)(aiRecord *prec);
508 long (*special_linconv)(aiRecord *prec, int after);
512 { 6, NULL, NULL, init_record, NULL },
515 epicsExportAddress(dset, devAiSoft);
518 The above `typedef struct` declaration was copied directly from the new
519 aiRecord.h file and wrapped in the `#ifndef HAS_aidset` conditional.
521 This same pattern should be followed for all record types except for the lsi,
522 lso and printf record types, which have published their device support entry
523 table structures since they were first added to Base but didn't previously embed
524 the `dset common` member. Device support for these record types therefore can't
525 use the dset name since the new definitions are different from the originals and
526 will cause a compile error, so this pattern should be used instead:
532 long (*read_string)(lsiRecord *prec);
538 {5, NULL, lsi_init, lsi_init_record, get_ioint_info},
545 ## EPICS Release 7.0.3.1
547 **IMPORTANT NOTE:** *Some record types in this release will not be compatible
548 with device support binaries compiled against earlier versions of those record
549 types, because importing the record documentation from the EPICS Wiki
550 [as described below](#imported-record-reference-documentation-from-wiki)
551 also modified the order of some of the fields in the record definitions.*
552 As long as all support modules and IOCs are rebuilt from source after updating
553 them to use this release of EPICS Base, these changes should not have any
557 ### logClient reliability
559 On supported targets (Linux, Mac, Windows) logClient will attempt to avoid dropping
560 undelivered log messages when the connection to the log server is closed/reset.
562 ### Timers and delays use monotonic clock
564 Many internal timers and delay calculations use a monotonic clock
565 epicsTimeGetMonotonic() instead of the realtime epicsTimeGetCurrent(). This is
566 intended to make IOCs less susceptible to jumps in system time.
568 ### Iocsh `on error ...`
570 A new statement is added to enable IOC shell commands to signal error
571 conditions, and for scripts to respond. This first is through the new function
574 int iocshSetError(int err);
577 A script may be prefixed with eg. "on error break" to stop at the failed
581 on error continue | break | wait [value] | halt
584 A suggested form for IOC shell commands is:
587 static void doSomethingCallFunc(const iocshArgBuf *args)
589 iocshSetError(doSomething(...)); /* return 0 == success */
593 ### Relocatable Builds
595 Allows built trees to be copied or moved without invalidating RPATH entires.
597 The `LINKER_USE_RPATH` Makefile variable (see `configure/CONFIG_SITE`) may be
598 set to `YES`, `NO`, and a new third option `ORIGIN`. This is limited to
599 targets using the ELF executable format (eg. Linux).
601 When `LINKER_USE_RPATH=ORIGIN`, the variable `LINKER_ORIGIN_ROOT` is set to
602 one of the parents of the build directory. Any libraries being linked
603 to which are found under this root will have a relative RPATH entry.
604 Other libraries continue to result in absolute RPATH entries.
606 An effect of this might change a support library from being linked with
607 `-Wl,-rpath /build/epics-base/lib/linux-x86`
609 `-Wl,-rpath \$ORIGIN/../../../epics-base/lib/linux-x86`
610 if the support module directory is `/build/mymodule`
611 and `LINKER_ORIGIN_ROOT=/build`.
613 The API functions `epicsGetExecDir()` and `epicsGetExecName()` are also
614 added to `osiFileName.h` to provide runtime access to the directory or
615 filename of the executable with which the process was started.
617 ### Decouple LINKER_USE_RPATH and STATIC_BUILD
619 Previously, setting `STATIC_BUILD=NO` implied `LINKER_USE_RPATH=NO`.
620 This is no longer the case. Setting `LINKER_USE_RPATH=YES` will
621 always emit RPATH entries. This was found to be helpful when linking
622 against some 3rd party libraries which are only available as shared objects.
624 ### Channel Access Security: Check Hostname Against DNS
626 Host names given in a `HAG` entry of an IOC's Access Security Configuration
627 File (ACF) have to date been compared against the hostname provided by the CA
628 client at connection time, which may or may not be the actual name of that
629 client. This allows rogue clients to pretend to be a different host, and the
630 IOC would believe them.
632 An option is now available to cause an IOC to ask its operating system to look
633 up the IP address of any hostnames listed in its ACF (which will normally be
634 done using the DNS or the `/etc/hosts` file). The IOC will then compare the
635 resulting IP address against the client's actual IP address when checking
636 access permissions at connection time. This name resolution is performed at
637 ACF file load time, which has a few consequences:
639 1. If the DNS is slow when the names are resolved this will delay the process
640 of loading the ACF file.
642 2. If a host name cannot be resolved the IOC will proceed, but this host name
643 will never be matched.
645 3. Any changes in the hostname to IP address mapping will not be picked up by
646 the IOC unless and until the ACF file gets reloaded.
648 Optionally, IP addresses may be added instead of, or in addition to, host
649 names in the ACF file.
651 This feature can be enabled before `iocInit` with
654 var("asCheckClientIP",1)
657 or with the VxWorks target shell use
663 ### New and modified epicsThread APIs
665 #### `epicsThreadCreateOpt()`
667 A new routine `epicsThreadCreateOpt()` is an alternative to
668 `epicsThreadCreate()` which takes some arguments via a structure (`struct
669 epicsThreadOpts`) to allow for future extensions.
672 typedef struct epicsThreadOpts {
673 unsigned int priority;
674 unsigned int stackSize;
675 unsigned int joinable;
677 #define EPICS_THREAD_OPTS_INIT { \
678 epicsThreadPriorityLow, epicsThreadStackMedium, 0}
679 epicsThreadId epicsThreadCreateOpt(const char * name,
680 EPICSTHREADFUNC funptr, void * parm, const epicsThreadOpts *opts);
683 The final `opts` parameter may be `NULL` to use the default values of thread
684 priority (low) and stack size (medium). Callers wishing to provide alternative
685 settings for these thread options or to create a joinable thread (see below)
686 should create and pass in an `epicsThreadOpts` structure as shown below.
687 Always initialize one of these structures using the `EPICS_THREAD_OPTS_INIT`
688 macro to ensure that any additional fields that get added in the future are
689 set to their default values.
692 void startitup(void) {
693 epicsThreadOpts opts = EPICS_THREAD_OPTS_INIT;
696 opts.priority = epicsThreadPriorityMedium;
697 tid = epicsThreadCreateOpt("my thread", &threadMain, NULL, &opts);
701 C or C++ Code that also needs to build on earlier versions of Base can use
702 `#ifdef EPICS_THREAD_OPTS_INIT` to determine whether the
703 `epicsThreadCreateOpt()` API is available on this Base version.
705 #### Thread stack sizes
707 The `stackSize` member of the `epicsThreadOpts` structure and the equivalent
708 parameters to the `epicsThreadCreate()` and `epicsThreadMustCreate()` routines
709 can now be passed either one of the `epicsThreadStackSizeClass` enum values or
710 a value returned from the `epicsThreadGetStackSize()` routine.
712 #### `epicsThreadMustJoin()`
714 If the new `joinable` flag of an `epicsThreadOpts` structure is non-zero (the
715 default value is zero), the new API routine `epicsThreadMustJoin()` *must* be
716 called with the thread's `epicsThreadId` when/after the thread exits, to free
717 up thread resources. This function will block until the thread's main function
718 has returned, allowing the parent to wait for its child thread. The child's
719 `epicsThreadId` will no longer be valid and should not be used after the
720 `epicsThreadMustJoin()` routine returns.
722 A thread that was originally created with its joinable flag set may itself
723 call `epicsThreadMustJoin()`, passing in its own epicsThreadId. This marks the
724 thread as no longer being joinable, so it will then free the thread resources
725 itself when its main function returns. The `epicsThreadId` of a thread that is
726 not joinable gets invalidated as soon as its main function returns.
728 ### Non-VME RTEMS targets now define pdevLibVME
730 Previously IOC executables that made calls to devLib routines would fail to
731 link when built for some non-VME based RTEMS targets, which would have to be
732 explicitly filtered out by sites that build Base for those targets. [This
733 fix](https://bugs.launchpad.net/epics-base/+bug/1841692) makes that no longer
734 necessary, all RTEMS targets should now link although the IOC won't be able to
735 be used with the VME I/O on those systems (that we don't have VMEbus I/O
736 support for in libCom).
740 ## EPICS Release 7.0.3
742 ### `epicsTimeGetCurrent()` optimization
744 Add a fast path to epicsTimeGetCurrent() and related calls in the common case
745 where only the default OS current time provider is registered. This path does
746 not take the global mutex guarding the time providers list, potentially
747 reducing lock contention.
749 ### dbEvent tweak Queue size
751 The size of the queue used by dbEvent to push monitor updates has been
752 slightly increased based on `DBR_TIME_DOUBLE` to better fill an ethernet frame.
753 This may result in slightly fewer, but larger frames being sent.
755 ### mbbo/mbbiDirect number of bits as precision
757 Report NOBT as "precision" through the dbAccess API. This is not accessible
758 through CA, but is planned to be used through QSRV.
762 ## EPICS Release 7.0.2.2
764 ### Build System changes
766 * The GNUmake build targets `cvsclean` and `depclean` are now available from
767 any directory; previously they were only available from application top
770 * The approach that EPICS Base uses for building submodules inside the parent
771 module looks useful for support modules too. The rules for building submodules
772 have been modified and extracted into a new `RULES_MODULES` file, so a support
773 module will be able to use them too without having to copy them into its own
774 `modules/Makefile`. There are some specific requirements that support modules
775 and their submodules must follow, which are described as comments in the new
776 `base/configure/RULES_MODULES` file itself.
778 ### `EPICS_BASE_VERSION` Update Policy change
780 In the past, a build of EPICS using sources checked out from the repository
781 branch between official releases would have shown the version number of the
782 previous release, followed by a -DEV suffix, for example 7.0.2.1-DEV.
784 The policy that controls when the number gets updated has been changed, and
785 now immediately after a release has been tagged the version number will be
786 updated to the next patch release version, plus the -DEV suffix as before.
787 Thus following 7.0.2.2 the version number will show as 7.0.2.3-DEV. This does
788 not require the next official release to be numbered 7.0.2.3 though, it could
789 become 7.0.3 or even 7.1.0 if the changes incorporated into it are more
790 substantial than bug fixes.
792 ### Drop `CLOCK_MONOTONIC_RAW` from posix/osdMonotonic.c
794 Turns out this is ~10x slower to query than `CLOCK_MONOTONIC`.
798 ## EPICS Release 7.0.2.1
800 ### Linking shared libraries on macOS
802 The linker flag `-flat_namespace` has been restored for creating shared
803 libraries, although not for loadable libraries (bundles). This was required
804 for building using the latest versions of Apple XCode.
806 ### Fix `DB_LINK` loop breaking
808 A regression was introduced in 7.0.2 which caused record chains with loops to
809 be incorrectly broken. Processing should be skipped when a `DB_LINK` with
810 Process Passive (PP) closes a loop to a synchronous record.
812 Instead in 7.0.2 the targeted record would be processed if processing began
813 with a remote action (or some other caller of `dbPutField()`). This would
814 result in the loop running a second time. The loop would be broken on the
817 [See lp: #1809570](https://bugs.launchpad.net/epics-base/+bug/1809570)
819 ### Old dbStaticLib APIs removed
821 Support for some obsolete dbStaticLib Database Configuration Tool (DCT) APIs
822 was removed some time ago, but vestiges of them still remained. The following
823 routines and macros and have now finally been removed:
825 * `int dbGetFieldType(DBENTRY *pdbentry)`
826 * `int dbGetLinkType(DBENTRY *pdbentry)`
836 * `DCT_LINK_CONSTANT`
840 ### Fix for `dbhcr` before `iocInit`
842 The `dbhcr` command used to work before `iocInit` as well as afterwards. It
843 displays all records that have hardware addresses (`VME_IO`, `CAMAC_IO`,
844 `GPIB_IO`, `INST_IO` etc.) but stopped working if run before iocInit due to the
845 rewrite of the link address parser code in dbStaticLib. This release fixes that
846 issue, although in some cases the output may be slightly different than it used
851 ## EPICS Release 7.0.2
855 The list of tracked bugs fixed in this release can be found on the
856 [Launchpad Milestone page for EPICS Base 7.0.2](https://launchpad.net/epics-base/+milestone/7.0.2).
858 ### Git Branches Recombined
860 The four separate Git branches `core/master`, `libcom/master`, `ca/master` and
861 `database/master` have been recombined into one branch called `7.0`. Keeping
862 these as 4 separate branches in the same repository made it impossible to
863 create merge requests that contained changes in more than one of these
864 modules. The layout of the source files has not changed at all however, so the
865 source code for libcom, ca and the database are still found separately under
866 the module subdirectory.
870 ## EPICS Release 7.0.1.1
872 ### Changed SIML failure behavior
874 A failure when fetching the simulation mode through `SIML` will not put the
875 record into INVALID alarm state anymore. Instead, as long as the record's
876 current alarm severity (`SEVR`)is `NO_ALARM`, its alarm status (`STAT`) will be
877 set to `LINK_ALARM` without increasing the severity. This allows clients to get
878 some notification of a failing or bad `SIML` link without otherwise affecting
881 ### `dbVerify()` has been restored to dbStaticLib
883 This routine was removed in Base-3.16.1 but has been reimplemented in this
884 release by special request. Note that the error message strings that it
885 returns when verification fails have changed, but are still designed for
888 ### Simulation mode improvements
890 Records that support simulation mode have two new fields, `SSCN` (Simulation
891 Scan Mode) and `SDLY` (Simulation Delay). `SSCN` is a menu field that provides
892 an alternate value for the `SCAN` field to be used while the record is in
893 simulation mode. This is especially useful for I/O scanned records, for which
894 simulation mode was not working at all. Setting `SDLY` to a positive value
895 makes the record process asynchronously in simulation mode, with the second
896 stage processing happening after the specified time (in seconds).
898 ### Extend the dbServer API with init/run/pause/stop methods
900 This change permits IOCs to be built that omit the CA server (RSRV) by
901 removing its registrar entry which is now provided in the new `rsrv.dbd` file.
902 Other server layers can be built into the IOC (alongside RSRV or in place of
903 it) by registering them in a similar manner. The dbServer API is documented
904 with Doxygen comments in the header file.
906 Specific IOC server layers can be disabled at runtime by adding their name to
907 the environment variable `EPICS_IOC_IGNORE_SERVERS` (separated by spaces if more
908 than one should be ignored).
910 ### Grand source-code reorganization
912 EPICS 7.0.1 contains the IOC Database, RSRV server and the Channel Access
913 client code from EPICS Base 3.16.1 along with all the original record types
914 and soft device support, but GDD and the Portable Channel Access Server have
915 been unbundled and are now available separately. In their place we have
916 brought in the more recently written EPICS V4 C++ libraries (collectively
917 referred to as the PVA modules). The directory tree for EPICS is somewhat
918 larger as a result, and the original structure of the Base directories has
919 been split into 4 separate Git repositories. External modules should build
920 against this new structure with little or no changes needed, except that some
921 allowance may be needed for the merging of the V4 modules.
923 There should be rather more description and documantation of these changes
924 than is currently available, but as developers we generally much prefer to
925 write code than documentation. Send questions to the tech-talk mailing list
926 and we'll be happy to try and answer them!
930 ## Changes made between 3.16.1 and 3.16.2
934 The list of tracked bugs fixed in this release can be found on the
935 [Launchpad Milestone page for EPICS Base 3.16.2](https://launchpad.net/epics-base/+milestone/3.16.2).
937 ### Status reporting for the callback and scanOnce task queues
939 Two new iocsh commands and some associated underlying APIs have been added to
940 show the state of the queues that feed the three callback tasks and the
941 scanOnce task, including a high-water mark which can optionally be reset. The
942 new iocsh commands are `callbackQueueShow` and `scanOnceQueueShow`; both take
943 an optional integer argument which must be non-zero to reset the high-water
946 ### Support for event codes greater than or equal to `NUM_TIME_EVENTS`
948 Event numbers greater than or equal to `NUM_TIME_EVENTS` are now allowed if
949 supported by the registered event time provider, which must provide its own
950 advancing timestamp validation for such events.
952 Time events numbered 0 through `(NUM_TIME_EVENTS-1)` are still validated by code
953 in epicsGeneralTime.c that checks for advancing timestamps and enforces that
956 ### Type-safe Device and Driver Support Tables
958 Type-safe versions of the device and driver support structures `dset` and
959 `drvet` have been added to the devSup.h and drvSup.h headers respectively. The
960 original structure definitions have not been changed so existing support
961 modules will still build normally, but older modules can be modified and new
962 code written to be compatible with both.
964 The old structure definitions will be replaced by the new ones if the macros
965 `USE_TYPED_DSET` and/or `USE_TYPED_DRVET` are defined when the appropriate
966 header is included. The best place to define these is in the Makefile, as with
967 the `USE_TYPED_RSET` macro that was introduced in Base-3.16.1 and described
968 below. See the comments in devSup.h for a brief usage example, or look at
969 [this commit](https://github.com/epics-modules/ipac/commit/a7e0ff4089b9aa39108bc8569e95ba7fcf07cee9)
970 to the ipac module to see a module conversion.
972 A helper function `DBLINK* dbGetDevLink(dbCommon *prec)` has also been added
973 to devSup.h which fetches a pointer to the INP or OUT field of the record.
975 ### RTEMS build configuration update, running tests under QEMU
977 This release includes the ability to run the EPICS unit tests built for a
978 special version of the RTEMS-pc386 target architecture on systems that have an
979 appropriate QEMU emulator installed (`qemu-system-i386`). It is also now
980 possible to create sub-architectures of RTEMS targets, whereas previously the
981 EPICS target architecture name had to be `RTEMS-$(RTEMS_BSP)`.
983 The new target `RTEMS-pc386-qemu` builds binaries that can be run in the
984 `qemu-system-i386` PC System emulator. This target is a derivative of the
985 original `RTEMS-pc386` target but with additional software to build an in-
986 memory file-system, and some minor modifications to allow the unit tests to
987 work properly under QEMU. When this target is enabled, building any of the
988 make targets that cause the built-in self-tests to be run (such as `make
989 runtests`) will also run the tests for RTEMS using QEMU.
991 To allow the new 3-component RTEMS target name, the EPICS build system for
992 RTEMS was modified to allow a `configure/os/CONFIG.Common.<arch>` file to set
993 the `RTEMS_BSP` variable to inform the build what RTEMS BSP to use. Previously
994 this was inferred from the value of the `T_A` make variable, but that prevents
995 having multiple EPICS targets that build against the same BSP. All the
996 included RTEMS target configuration files have been updated; build
997 configuration files for out-of-tree RTEMS targets will continue to work as the
998 original rules are used to set `RTEMS_BSP` if it hasn't been set when needed.
1000 ### Link type enhancements
1002 This release adds three new link types: "state", "debug" and "trace". The
1003 "state" link type gets and puts boolean values from/to the dbState library
1004 that was added in the 3.15.1 release. The "debug" link type sets the
1005 `jlink::debug` flag in its child link, while the "trace" link type also causes
1006 the arguments and return values for all calls to the child link's jlif and
1007 lset routines to be printed on stdout. The debug flag can no longer be set
1008 using an info tag. The addition of the "trace" link type has allowed over 200
1009 lines of conditional diagnostic printf() calls to be removed from the other
1012 The "calc" link type can now be used for output links as well as input links.
1013 This allows modification of the output value and even combining it with values
1014 from other input links. See the separate JSON Link types document for details.
1016 A new `start_child()` method was added to the end of the jlif interface table.
1018 The `lset` methods have now been properly documented in the dbLink.h header
1019 file using Doxygen annotations, although we do not run Doxygen on the source
1020 tree yet to generate API documentation.
1022 Link types that utilize child links must now indicate whether the child will
1023 be used for input, output or forward linking by the return value from its
1024 `parse_start_map()` method. The `jlif_key_result` enum now contains 3 values
1025 `jlif_key_child_inlink`, `jlif_key_child_outlink` and `jlif_key_child_fwdlink`
1026 instead of the single `jlif_key_child_link` that was previously used for this.
1028 ### GNUmake targets for debugging
1030 Some additional build rules have been added to help debug configuration
1031 problems with the build system. Run `make show-makefiles` to get a sorted list
1032 of all the files that the build system includes when building in the current
1035 A new pattern rule for `PRINT.%` can be used to show the value of any GNUmake
1036 variable for the current build directory (make sure you are in the right
1037 directory though, many variables are only set when inside the `O.<arch>` build
1038 directory). For example `make PRINT.T_A` will display the build target
1039 architecture name from inside a `O.<arch>` directory but the variable will be
1040 empty from an application top or src directory. `make PRINT.EPICS_BASE` will
1041 show the path to Base from any EPICS application directory though.
1043 ### Propagate PUTF across Asynchronous record processing
1045 The IOC contains a mechanism involving the PUTF and RPRO fields of each record
1046 to ensure that if a record is busy when it receives a put to one of its
1047 fields, the record will be processed again to ensure that the new field value
1048 has been correctly acted on. Until now that mechanism only worked if the put
1049 was to the asynchronous record itself, so puts that were chained from some
1050 other record via a DB link did not cause reprocessing.
1052 In this release the mechanism has been extended to propagate the PUTF state
1053 across DB links until all downstream records have been reprocessed. Some
1054 additional information about the record state can be shown by setting the TPRO
1055 field of an upstream record, and even more trace data is displayed if the
1056 debugging variable `dbAccessDebugPUTF` is set in addition to TPRO.
1058 ### Finding info fields
1060 A new iocsh command `dbli` lists the info fields defined in the database, and
1061 can take a glob pattern to limit output to specific info names. The newly
1062 added dbStaticLib function `dbNextMatchingInfo()` iterates through the info
1063 fields defined in the current record, and is used to implement the new
1066 ### Output from `dbpr` command enhanced
1068 The "DataBase Print Record" command `dbpr` now generates slightly better
1069 output, with more field types having their own display methods. This release
1070 also includes additional protection against buffer overflows while printing
1071 long links in `dbpr`, and corrects the output of long strings from the `dbgf`
1074 ### Record types mbbiDirect and mbboDirect upgraded to 32 bit
1076 The VAL fields and related fields of these records are now `DBF_LONG`. (Not
1077 `DBF_ULONG` in order to prevent Channel Access from promoting them to
1078 `DBF_DOUBLE`.) Additional bit fields `B10`...`B1F` have been added.
1080 Device support that accesses `VAL` or the bit fields directly (most don't) and
1081 aims for compatibility with old and new versions of these records should use
1082 at least 32 bit integer types to avoid bit loss. The number of bit fields can
1083 be calculated using `8 * sizeof(prec->val)` which is correct in both versions.
1085 ### Restore use of ledlib for VxWorks command editing
1087 The epicsReadline refactoring work described below unfortunately disabled the
1088 VxWorks implementation of the osdReadline.c API that uses ledlib for command
1089 editing and history. This functionality has now been restored, see Launchpad
1090 [bug #1741578](https://bugs.launchpad.net/bugs/1741578).
1092 ### Constant link types
1094 Constant links can now hold 64-bit integer values, either as scalars or
1095 arrays. Only base 10 is supported by the JSON parser though, the JSON standard
1096 doesn't allow for hexadecimal numbers.
1098 ### Upgraded the YAJL JSON Library
1100 The third-party YAJL library that has been included in libCom for several
1101 years has been upgraded to version 2.1.0 and several bugs fixed. This has an
1102 updated API, requiring any code that uses it to parse its own JSON files to be
1103 modified to match. The changes are mainly that it uses `size_t` instead
1104 `unsigned int` for string lengths, but it also uses `long long` instead of
1105 `long` for JSON integer values, which was the main motivation for the upgrade.
1107 The self-tests that YAJL comes with have been imported and are now run as an
1108 EPICS Unit Test program, and the JSON syntax accepted by the parser was
1109 extended to permit trailing commas in both arrays and maps. The difference
1110 between the old and new YAJL APIs can be detected at compile time by looking
1111 for the macro `EPICS_YAJL_VERSION` which is defined in the `yajl_common.h`
1112 header file along with a brief description of the API changes.
1114 ### Timestamp support for the calc link type
1116 A new optional parameter can be given when specifying a calc JSON link. The
1117 `time` parameter is a string containing a single letter `A..L` that selects
1118 one of the input links to be used for the timestamp of calculation if
1119 requested. The timestamp will be fetched atomically with the value from the
1120 chosen input link (providing that input link type supports the readLocked()
1123 ### Silence errors from puts to constant link types
1125 A soft channel output record with the OUT link unset uses the CONSTANT link
1126 type. The new link type code was causing some soft channel device supports to
1127 return an error status from the write method of that link type, which would
1128 cause a `ca_put()` operation to such a record to generate an exception. This has
1129 been silenced by giving the constant link types a dummy putValue method. A new
1130 test program has been added to prevent regressions of this behaviour.
1132 ### RSRV expanding large buffer causes crash
1134 In the 3.16.1 release a crash can occur in the IOC's RSRV server when a large
1135 array is made even larger; the previous array buffer was not being released
1136 correctly. See Launchpad
1137 [bug #1706703](https://bugs.launchpad.net/epics-base/+bug/1706703).
1141 ## Changes made between 3.16.0.1 and 3.16.1
1143 ### IOC Database Support for 64-bit integers
1145 The IOC now supports the 64-bit integer field types `DBF_INT64` and
1146 `DBF_UINT64`, and there are new record types `int64in` and `int64out` derived
1147 from the `longin` and `longout` types respectively that use the `DBF_INT64`
1148 data type for their VAL and related fields. The usual range of Soft Channel
1149 device support are included for these new record types.
1151 All internal IOC APIs such as dbAccess can handle the new field types and
1152 their associated request values `DBR_INT64` and `DBR_UINT64`, which are
1153 implemented using the `epicsInt64` and `epicsUInt64` typedef's from the
1154 `epicsTypes.h` header.
1156 The waveform record type has been updated to support these new field types.
1157 **All waveform device support layers must be updated to recognize the new type
1158 enumeration values**, which had to be inserted before the `FLOAT` value in the
1159 enum `dbfType` and in `menuFtype`. C or C++ code can detect at compile-time
1160 whether this version of base provides 64-bit support by checking for the
1161 presence of the `DBR_INT64` macro as follows (Note that `DBF_INT64` is an
1162 enum tag and not a preprocessor macro):
1166 /* Code where Base has INT64 support */
1168 /* Code for older versions */
1172 If the code uses the old `db_access.h` types (probably because it's calling
1173 Channel Access APIs) then it will have to test against the EPICS version
1174 number instead, like this:
1177 #include <epicsVersion.h>
1180 # define VERSION_INT(V,R,M,P) ( ((V)<<24) | ((R)<<16) | ((M)<<8) | (P))
1182 #ifndef EPICS_VERSION_INT
1183 # define EPICS_VERSION_INT VERSION_INT(EPICS_VERSION, EPICS_REVISION, EPICS_MODIFICATION, EPICS_PATCH_LEVEL)
1186 #if EPICS_VERSION_INT >= VERSION_INT(3,16,1,0)
1187 /* Code where Base has INT64 support */
1189 /* Code for older versions */
1193 Channel Access does not (and probably never will) directly support 64-bit
1194 integer types, so the new field types are presented to the CA server as
1195 `DBF_DOUBLE` values. This means that field values larger than 2^52
1196 (0x10_0000_0000_0000 = 4503599627370496) cannot be transported over Channel
1197 Access without their least significant bits being truncated. The EPICS V4
1198 pvAccess network protocol _can_ transport 64-bit data types however, and a
1199 future release of the pvaSrv module will connect this ability to the fields of
1202 Additional 64-bit support will be provided in later release. For instance the
1203 JSON parser for the new Link Support feature only handles integers up to 32
1204 bits wide, so constant array initializer values cannot hold larger values in
1207 ### Add `EPICS_CA_MCAST_TTL`
1209 A new environment parameter `EPICS_CA_MCAST_TTL` is used to set the Time To Live
1210 (TTL) value of any IP multi-cast CA search or beacon packets sent.
1212 ### `EPICS_CA_MAX_ARRAY_BYTES` is optional
1214 A new environment parameter `EPICS_CA_AUTO_ARRAY_BYTES` is now used by libca and
1215 RSRV (CA clients and the IOC CA server). The default is equivalent to setting
1216 `EPICS_CA_AUTO_ARRAY_BYTES=YES` which removes the need to set
1217 `EPICS_CA_MAX_ARRAY_BYTES` and always attempts to allocate sufficiently large
1218 network buffers to transfer large arrays properly over the network. In this case
1219 the value of the `EPICS_CA_MAX_ARRAY_BYTES` parameter is ignored.
1221 Explicitly setting `EPICS_CA_AUTO_ARRAY_BYTES=NO` will continue to honor the
1222 buffer setting in `EPICS_CA_AUTO_ARRAY_BYTES` as in previous releases.
1224 The default setting for `EPICS_CA_AUTO_ARRAY_BYTES` can be changed by adding the
1228 EPICS_CA_AUTO_ARRAY_BYTES=NO
1231 to the `configure/CONFIG_SITE_ENV` file before building Base. Sites that wish to
1232 override this only for specific IOC architectures can create new files for each
1233 architecture named `configure/os/CONFIG_SITE_ENV.<target-arch>` with the above
1234 setting in before building Base. The configuration can also be explicitly
1235 changed by setting the environment variable in the IOC's startup script,
1236 anywhere above the `iocInit` line.
1238 The PCAS server (used by the PV Gateway and other CA servers) now always behaves
1239 as if `EPICS_CA_AUTO_ARRAY_BYTES` is set to `YES` (it ignores the configuration
1240 parameter and environment variable).
1242 ### Channel Access "modernization"
1244 Drop support for CA clients advertising protocol versions less than 4.
1246 This effects clients from Base older than 3.12.0-beta1. Newer clients will
1247 continue to be able to connect to older servers. Older clients will be ignored
1250 This allows removal of UDP echo and similar protocol features which are not
1251 compatible with secure protocol design practice.
1253 ### Lookup-tables using the subArrray record
1255 The subArray record can now be used as a lookup-table from a constant array
1256 specified in its INP field. For example:
1259 record(subArray, "powers-of-2") {
1262 field(INP, [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048])
1268 The INDX field selects which power of 2 to set the VAL field to. In previous
1269 releases the INP field would have to have been pointed to a separate waveform
1270 record that was initialized with the array values somehow at initialization
1273 ### Synchronized Timestamps with TSEL=-2
1275 Most Soft Channel input device support routines have supported fetching the
1276 timestamp through the INP link along with the input data. However before now
1277 there was no guarantee that the timestamp provided by a CA link came from the
1278 same update as the data, since the two were read from the CA input buffer at
1279 separate times without maintaining a lock on that buffer in between. This
1280 shortcoming could be fixed as a result of the new link support code, which
1281 allows code using a link to pass a subroutine to the link type which will be
1282 run with the link locked. The subroutine may make multiple requests for
1283 metadata from the link, but must not block.
1285 ### Extensible Link Types
1287 A major new feature introduced with this release of EPICS Base is an
1288 Extensible Link Type mechanism, also known as Link Support or JSON Link Types.
1289 This addition permits new kinds of link I/O to be added to an IOC in a similar
1290 manner to the other extension points already supported (e.g. record, device
1291 and driver support).
1293 A new link type must implement two related APIs, one for parsing the JSON
1294 string which provides the link address and the other which implements the link
1295 operations that get called at run-time to perform I/O. The link type is built
1296 into the IOC by providing a new `link` entry in a DBD file.
1298 #### New Link Types Added
1300 This release contains two new JSON link types, `const` and `calc`:
1302 * The `const` link type is almost equivalent to the old CONSTANT link type
1303 with the updates described below to accept arrays and strings, except that
1304 there is no need to wrap a scalar string constant inside array brackets since
1305 a constant string will never be confused with a PV name.
1307 * The `calc` link type allows CALC expressions to be used to combine
1308 values from other JSON links to produce its value. Until additional JSON link
1309 types are created though, the `calc` link type has little practical utility as
1310 it can currently only fetch inputs from other `calc` links or from `const`
1314 field(INP, {calc:{expr:"A+B+1",
1322 The new link types are documented in a separate document that gets generated at build time and installed as `html/links.html`.
1324 #### Device Support Addressing using `JSON_LINK`
1326 The API to allow device support to use JSON addresses is currently
1327 incomplete; developers are advised not to try creating device support that
1328 specifies a `JSON_LINK` address type.
1330 #### Support Routine Modifications for Extensible Link Types
1332 For link fields in external record types and soft device support to be able
1333 to use the new link types properly, various changes are required to utilize
1334 the new Link Support API as defined in the dbLink.h header file and outlined
1335 below. The existing built-in Database and Channel Access link types have been
1336 altered to implement the link APIs, so will work properly after these
1339 * Make all calls to `recGblInitConstantLink()` unconditional on the link
1340 type, i.e. change this code:
1343 if (prec->siml.type == CONSTANT) {
1344 recGblInitConstantLink(&prec->siml, DBF_USHORT, &prec->simm);
1351 recGblInitConstantLink(&prec->siml, DBF_USHORT, &prec->simm);
1354 Note that `recGblInitConstantLink()` still returns TRUE if the field was
1355 successfully initialized from the link (implying the link is constant).
1356 This change will work properly with all Base releases currently in use.
1358 * Code that needs to identify a constant link should be modified to use
1359 the new routine `dbLinkIsConstant()` instead, which returns TRUE for constant
1360 or undefined links, FALSE for links whose `dbGetLink()` routine may return
1361 different values on different calls. For example this:
1364 if (prec->dol.type != CONSTANT)
1370 if (!dbLinkIsConstant(&prec->dol))
1373 When the converted software is also required to build against older versions
1374 of Base, this macro definition may be useful:
1377 #define dbLinkIsConstant(lnk) ((lnk)->type == CONSTANT)
1380 * Any code that calls dbCa routines directly, or that explicitly checks if
1381 a link has been resolved as a CA link using code such as
1384 if (prec->inp.type == CA_LINK)
1387 will still compile and run, but will only work properly with the old CA link
1388 type. To operate with the new extensible link types such code must be
1389 modified to use the new generic routines defined in dbLink.h and should
1390 never attempt to examine or modify data inside the link. After conversion
1391 the above line would probably become:
1394 if (dbLinkIsVolatile(&prec->inp))
1397 A volatile link is one like a Channel Access link which may disconnect and
1398 reconnect without notice at runtime. Database links and constant links are
1399 not volatile; unless their link address is changed they will always remain
1400 in the same state they started in. For compatibility when building against
1401 older versions of Base, this macro definition may be useful:
1404 #define dbLinkIsVolatile(lnk) ((lnk)->type == CA_LINK)
1407 * The current connection state of a volatile link can be found using the
1408 routine `dbIsLinkConnected()` which will only return TRUE for a volatile link
1409 that is currently connected. Code using the older dbCa API returning this
1410 information used to look like this:
1413 stat = dbCaIsLinkConnected(plink);
1416 which should become:
1419 stat = dbIsLinkConnected(plink);
1422 Similar changes should be made for calls to the other dbCa routines.
1424 * A full example can be found by looking at the changes to the calcout
1425 record type, which has been modified in this release to use the new dbLink
1428 ### Constant Link Values
1430 Previously a constant link (i.e. a link that did not point to another PV,
1431 either locally or over Channel Access) was only able to provide a single
1432 numeric value to a record initialization; any string given in a link field
1433 that was not recognized as a number was treated as a PV name. In this release,
1434 constant links can be expressed using JSON array syntax and may provide array
1435 initialization of values containing integers, doubles or strings. An array
1436 containing a single string value can also be used to initialize scalar
1437 strings, so the stringin, stringout, lsi (long string input), lso (long string
1438 output), printf, waveform, subArray and aai (analog array input) record types
1439 and/or their soft device supports have been modified to support this.
1441 Some examples of constant array and string initialized records are:
1444 record(stringin, "const:string") {
1445 field(INP, ["Not-a-PV-name"])
1447 record(waveform, "const:longs") {
1450 field(INP, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
1452 record(aai, "const:doubles") {
1455 field(INP, [0, 1, 1.6e-19, 2.718, 3.141593])
1457 record(aSub, "select") {
1460 field(INPA, ["Zero", "One", "Two", "Three"])
1465 field(SNAM, "select_asub")
1469 Reminder: Link initialization with constant values normally only occurs at
1470 record initialization time. The calcout and printf record types are the only
1471 exceptions in the Base record types to this rule, so it is generally not
1472 useful to change a const link value after iocInit.
1474 ### Database Parsing of "Relaxed JSON" Values
1476 A database file can now provide a "relaxed JSON" value for a database field
1477 value or an info tag. Only a few field types can currently accept such values,
1478 but the capability is now available for use in other places in the future.
1479 When writing to a JSON-capable field at run-time however, only strictly
1480 compliant JSON may be used (the dbStaticLib parser rewrites relaxed JSON
1481 values into strict JSON before passing them to the datase for interpretation,
1482 where the strict rules must be followed).
1484 "Relaxed JSON" was developed to maximize compatibility with the previous
1485 database parser rules and reduce the number of double-quotes that would be
1486 needed for strict JSON syntax. The parser does accept strict JSON too though,
1487 which should be used when machine-generating database files. The differences
1490 * Strings containing only the characters `a-z A-Z 0-9 _ - + .` do not have to
1491 be enclosed in double-quote characters.
1493 * The above rule applies to map keys as well as to regular string values.
1495 * The JSON keywords `null`, `true` and `false` (all lower-case) will be
1496 recognized as keywords, so they must be quoted to use any of these single words
1499 * Comments may be used, introduced as usual by the `#` character and extending
1500 to the end of the line.
1502 A JSON field or info value is only enclosed in quotes when the value being
1503 provided is a single string, and even here the quotes can be omitted in some
1504 cases as described above. The following shows both correct and incorrect
1505 excerpts from a database file:
1508 record(ai, math:pi) {
1509 field(INP, {const: 3.14159265358979}) # Correct
1510 field(SIOL, "{const: 3.142857}") # Wrong
1512 info(autosave, { # White-space and comments are allowed
1513 fields:[DESC, SIMM],
1519 Note that the record, field and info-tag names do *not* accept JSON values, so
1520 they follows the older bareword rules for quoting where the colon `:` and
1521 several additional characters are legal in a bareword string. Only the value
1522 (after the comma) is parsed as JSON. The autosave module has not been modified
1523 to accept JSON syntax, the above is only an example of how JSON might be used.
1525 ### Echoless comments in iocsh
1527 The way comments are parsed by the iocsh interpreter has changed. The
1528 interpreter can be selectively disabled from echoing comments coming from a
1529 script by starting those lines with `#-` rather than just `#`.
1531 ### Typed record support methods
1533 The table of record support functions (rset methods for short) no longer has
1534 entries of type `RECSUPFUN` (which says: any number and type of arguments).
1535 Instead, rset methods are now typed by default. The `RECSUPFUN` typedef has
1536 been deprecated and casts to it as well as using the untyped `struct rset`
1537 will create compilation warnings.
1539 Existing code (e.g. external record supports) will generate such warnings when
1540 compiled against this version of Base, but it will work without changes.
1542 For a conversion period, the new typed rset definitions are activated by
1543 defining `USE_TYPED_RSET`, preferably by setting `USR_CPPFLAGS +=
1544 -DUSE_TYPED_RSET` inside a Makefile. After activating the new typed rset in
1545 this way and making the following changes, the result should still compile and
1546 work properly against older versions of Base.
1548 The first parameter of `init_record` and `process` has been changed to `struct
1549 dbCommon *`. Record types that use `void*` here should be changed to use
1550 `struct dbCommon*`, and cast the argument to their own `xxxRecord *`.
1552 When compiled against this release, compiler warnings about incompatible types
1553 for the method pointers should be taken seriously. When compiled against older
1554 versions of base, such warnings are unavoidable.
1556 Record types written in C++ need to take more drastic measures because of the
1557 stricter type checking in C++. To remain compatible with older versions of
1558 base you will need to use something like:
1561 #include "epicsVersion.h"
1563 # if EPICS_VERSION_INT < VERSION_INT(3,16,0,2)
1564 # define RECSUPFUN_CAST (RECSUPFUN)
1566 # define RECSUPFUN_CAST
1569 # define RECSUPFUN_CAST (RECSUPFUN)
1573 and then replace `(RECSUPFUN)` with `RECSUPFUN_CAST` when initializing the
1574 rset. Further changes might also be needed, e.g. to adapt `const`-ness of
1579 ## Changes made between 3.15.3 and 3.16.0.1
1581 ### Build support for CapFast and dbst removed
1583 The build rules associated with the CapFast-related tools `sch2edif` and
1584 `e2db` and the database optimization tool `dbst` have been removed, along with
1585 the `DB_OPT` build configuration variable.
1587 ### compressRecord buffering order
1589 The compressRecord has a new field `BALG` which can select between FIFO
1590 (append) and LIFO (prepend) ordering for insertion of new elements. FIFO
1591 ordering is the default, matching the behviour of previous versions.
1593 ### Valgrind Instrumentation
1595 Valgrind is a software debugging suite provided by many Linux distributions.
1596 The header valgrind/valgrind.h is now included in, and installed by, Base.
1597 When included by a C or C++ source file this header defines some macros which
1598 expand to provide hints to the Valgrind runtime. These have no effect on
1599 normal operation of the software, but when run using the valgrind tool they
1600 can help to find memory leaks and buffer overflows. Suitable hints have been
1601 added to several free-lists within libCom, including freeListLib, allowing
1602 valgrind to provide more accurate information about the source of potential
1605 valgrind.h automatically disables itself when the build target is not
1606 supported by the valgrind tool. It can also explicitly be disabled by defining
1607 the macro `NVALGRIND`. See `src/libCom/Makefile` for a commented-out example.
1609 As a matter of policy valgrind.h will never be included by any header file
1610 installed by Base, so its use will remain purely an implementation detail
1611 hidden from application software. Support modules which choose to use
1612 valgrind.h are advised to do likewise.
1614 ### Database Multi-locking
1616 The IOC record locking code has been re-written with an expanded API; global
1617 locks are no longer required by the IOC database implementation.
1619 The new API functions center around `dbScanLockMany()`, which behaves like
1620 `dbScanLock()` applied to an arbitrary group of records. `dbLockerAlloc()` is
1621 used to prepare a list or record pointers, then `dbScanLockMany()` is called.
1622 When it returns, all of the records listed may be accessed (in any order) until
1623 `dbScanUnlockMany()` is called.
1625 The Application Developer's Guide has been updated to describe the API and
1626 implementation is more detail.
1628 Previously a global mutex `lockSetModifyLock` was locked and unlocked during
1629 `dbScanLock()`, acting as a sequencing point for otherwise unrelated calls. The
1630 new dbLock.c implementation does not include any global mutex in `dbScanLock()`
1631 or `dbScanLockMany()`. Locking and unlocking of unrelated lock sets is now
1632 completely concurrent.
1634 ### Generate Version Header
1636 A Perl script and Makefile rules have been added to allow modules to generate
1637 a C header file with a macro defined with an automatically updated identifier.
1638 This is a VCS revision ID (Darcs, Git, Mercurial, Subversion, and Bazaar are
1639 supported) or the date/time of the build if no VCS system is in use.
1641 The makeBaseApp example template has been updated with a new device support
1642 which makes this identifier visible via a lsi (long string input) record.
1644 ### epicsTime API return status
1646 The epicsTime routines that used to return epicsTimeERROR now return a
1647 specific `S_time_` status value, allowing the caller to discover the reason for
1648 any failure. The identifier `epicsTimeERROR` is no longer defined, so any
1649 references to it in source code will no longer compile. The identifier
1650 epicsTimeOK still exists and has the value 0 as before, so most code that uses
1651 these APIs can be changed in a way that is backwards-compatible with the
1652 previous return status.
1654 Time providers that have to return a status value and still need to be built
1655 with earlier versions of Base can define the necessary status symbols like
1659 #include "epicsTime.h"
1662 /* S_time_... status values were not provided before Base 3.16 */
1663 #define S_time_unsynchronized epicsTimeERROR
1664 #define S_time_...whatever... epicsTimeERROR
1668 ### Refactoring of epicsReadline
1670 The epicsReadline code has been reorganized to allow the commandline history
1671 editor to be disabled at runtime. The `EPICS_COMMANDLINE_LIBRARY` build setting
1672 still selects the preferred editor, but the new `IOCSH_HISTEDIT_DISABLE`
1673 environment variable can be set at runtime to disable history editing and make
1674 the IOC or other program use the basic editor instead. This is useful when
1675 starting and controlling an IOC from another program through its stdin and
1676 stdout streams since history editors often insert invisible escape codes into
1677 the stdout stream, making it hard to parse.
1679 ### Callback subsystem API
1681 Added a new macro `callbackGetPriority(prio, callback)` to the callback.h
1682 header and removed the need for dbScan.c to reach into the internals of its
1688 # Changes incorporated from the 3.15 branch
1691 ## Changes made on the 3.15 branch since 3.15.8
1693 ### Change to the `junitfiles` self-test build target
1695 The names of the generated junit xml test output files have been changed
1696 from `<testname>.xml` to `<testname>-results.xml`, to allow better
1697 distinction from other xml files. (I.e., for easy wildcard matching.)
1701 ## Changes made between 3.15.7 and 3.15.8
1705 The following launchpad bugs have fixes included in this release:
1707 - [lp: 1812084](https://bugs.launchpad.net/epics-base/+bug/1812084), Build
1708 failure on RTEMS 4.10.2
1709 - [lp: 1829770](https://bugs.launchpad.net/epics-base/+bug/1829770), event
1710 record device support broken with constant INP
1711 - [lp: 1829919](https://bugs.launchpad.net/epics-base/+bug/1829919), IOC
1712 segfaults when calling dbLoadRecords after iocInit
1713 - [lp: 1838792](https://bugs.launchpad.net/epics-base/+bug/1838792), epicsCalc
1714 bit-wise operators on aarch64
1715 - [lp: 1841608](https://bugs.launchpad.net/epics-base/+bug/1841608), logClient
1716 falsely sends error logs on all connections
1717 - [lp: 1853168](https://bugs.launchpad.net/epics-base/+bug/1853168), undefined
1718 reference to `clock_gettime()`
1719 - [lp: 1862328](https://bugs.launchpad.net/epics-base/+bug/1862328), Race
1720 condition on IOC start leaves rsrv unresponsive
1721 - [lp: 1868486](https://bugs.launchpad.net/epics-base/+bug/1868486),
1722 epicsMessageQueue lost messages
1724 ### Improvements to the self-test build targets
1726 This release contains changes that make it possible to integrate another test
1727 running and reporting system (such as Google's gtest) into the EPICS build
1728 system. The built-in test-runner and reporting system will continue to be used
1729 by the test programs inside Base however.
1731 These GNUmake `tapfiles` and `test-results` build targets now collect a list of
1732 the directories that experienced test failures and display those at the end of
1733 running and/or reporting all of the tests. The GNUmake process will also only
1734 exit with an error status after running and/or reporting all of the test
1735 results; previously the `-k` flag to make was needed and even that didn't always
1738 Continuous Integration systems are recommended to run `make tapfiles` (or if
1739 they can read junittest output instead of TAP `make junitfiles`) followed by
1740 `make -s test-results` to display the results of the tests. If multiple CPUs are
1741 available the `-j` flag can be used to run tests in parallel, giving the maximum
1742 jobs that should be allowed so `make -j4 tapfiles` for a system with 4 CPUs say.
1743 Running many more jobs than you have CPUs is likely to be slower and is not
1746 ### Calc Engine Fixes and Enhancements
1748 The code that implements bit operations for Calc expressions has been reworked
1749 to better handle some CPU architectures and compilers. As part of this work a
1750 new operator has been added: `>>>` performs a logical right-shift, inserting
1751 zero bits into the most significant bits (the operator `>>` is an arithmetic
1752 right-shift which copies the sign bit as it shifts the value rightwards).
1754 ### IOC logClient Changes
1756 The IOC's error logging system has been updated significantly to fix a number
1757 of issues including:
1759 - Only send errlog messages to iocLogClient listeners
1760 - Try to minimize lost messages while the log server is down:
1761 + Detect disconnects sooner
1762 + Don't discard the buffer on disconnect
1763 + Flush the buffer immediately after a server reconnects
1765 ### epicsThread: Main thread defaults to allow blocking I/O
1767 VxWorks IOCs (and potentially RTEMS IOCs running GeSys) have had problems with
1768 garbled error messages from dbStaticLib routines for some time — messages
1769 printed before `iocInit` were being queued through the errlog thread instead of
1770 being output immediately. This has been fixed by initializing the main thread
1771 with its `OkToBlock` flag set instead of cleared. IOCs running on other
1772 operating systems that use iocsh to execute the startup script previously had
1773 that set anyway in iocsh so were not affected, but this change might cause other
1774 programs that don't use iocsh to change their behavior slightly if they use
1775 `errlogPrintf()`, `epicsPrintf()` or `errPrintf()`.
1777 ### catools: Handle data type changes in camonitor
1779 The camonitor program didn't properly cope if subscribed to a channel whose data
1780 type changed when its IOC was rebooted without restarting the camonitor program.
1781 This has now been fixed.
1783 ### More Record Reference Documentation
1785 The remaining record types have had their reference pages moved from the Wiki,
1786 and some new reference pages have been written to cover the analog array and
1787 long string input and output record types plus the printf record type, none of
1788 which were previously documented. The wiki reference pages covering the fields
1789 common to all, input, and output record types have also been added, thanks to
1790 Rolf Keitel. The POD conversion scripts have also been improved and they now
1791 properly support linking to subsections in a different document, although the
1792 POD changes to add the cross-links that appeared in the original wiki pages
1793 still needs to be done in most cases.
1795 ### Fix build issues with newer MinGW versions
1797 The `clock_gettime()` routine is no longer used under MinGW since newer versions
1798 don't provide it any more.
1800 ### Fix race for port in RSRV when multiple IOCs start simultaneously
1802 If multiple IOCs were started at the same time, by systemd say, they could race
1803 to obtain the Channel Access TCP port number 5064. This issue has been fixed.
1807 ## Changes made between 3.15.6 and 3.15.7
1809 ### GNU Readline detection on Linux
1811 Most Linux architectures should now configure themselves automatically to use
1812 the GNU Readline library if its main header file can be found in the expected
1813 place, and not try to use Readline if the header file isn't present. For older
1814 Linux architectures where libncurses or libcurses must also be linked with, the
1815 manual configuration of the `COMMANDLINE_LIBRARY` variable in the appropriate
1816 `configure/os/CONFIG_SITE.Common.<arch>` file will still be necessary.
1818 ### Replace `EPICS_TIMEZONE` with `EPICS_TZ`
1820 The `EPICS_TIMEZONE` environment parameter provided time-zone information for
1821 the IOC's locale in the old ANSI format expected by VxWorks for its `TIMEZONE`
1822 environment variable, and can also used by RTEMS to set its `TZ` environment
1823 variable. However the `TIMEZONE` value has to be updated every year since it
1824 contains the exact dates of the daylight-savings time changes. The Posix TZ
1825 format that RTEMS uses contains rules that for calculating those dates, thus its
1826 value would only need updating if the rules (or the locale) are changed.
1828 This release contains changes that replace the `EPICS_TIMEZONE` environment
1829 parameter with one called `EPICS_TZ` and a routine for VxWorks that calculates
1830 the `TIMEZONE` environment variable from the current `TZ` value. This routine
1831 will be run once at start-up, when the EPICS clock has synchronized to its NTP
1832 server. The calculations it contains were worked out and donated to EPICS by
1833 Larry Hoff in 2009; it is unforunate that it has taken 10 years for them to be
1834 integrated into Base.
1836 The default value for the `EPICS_TZ` environment parameter is set in the Base
1837 `configure/CONFIG_SITE_ENV` file, which contains example settings for most EPICS
1838 sites that use VxWorks, and a link to a page describing the Posix TZ format for
1839 any locations that I missed.
1841 If a VxWorks IOC runs continuously without being rebooted from December 31st to
1842 the start of daylight savings time the following year, its `TIMEZONE` value will
1843 be wrong as it was calculated for the previous year. This only affects times
1844 that are converted to a string on the IOC however and is easily fixed; just run
1845 the command `tz2timezone()` on the VxWorks shell and the calculation will be
1846 redone for the current year. IOCs that get rebooted at least once before the
1847 start of summer time will not need this to be done.
1849 ### Added new decimation channel filter
1851 A new server-side filter has been added to the IOC for reducing the number
1852 and frequency of monitor updates from a channel by a client-specified factor.
1853 The filter's behaviour is quite simplistic, it passes the first monitor event it
1854 sees to the client and then drops the next N-1 events before passing another
1855 event. For example to sample a 60Hz channel at 1Hz, a 10Hz channel every 6
1856 seconds, or a 1Hz channel once every minute:
1859 Hal$ camonitor 'test:channel.{"dec":{"n":60}}'
1863 More information is included in the filters documentation, which can be found
1864 in the `html/filters.html` document that is generated during the build.
1866 ### Imported Record Reference Documentation from Wiki
1868 The remaining record types that had 3.14 reference documentation in the EPICS
1869 Wiki have had that documentation converted and imported into their DBD files.
1870 The preferred form for future updates to the record type descriptions is now an
1871 emailed patch file, a Pull Request through GitHub, or a Merge Request through
1872 Launchpad. Note that in some cases the behavior of a record type in a 7.0.x
1873 release may differ from that of the same record type in a 3.15 release, although
1874 this would be unusual, so it may be important to indicate the branch that your
1877 **NOTE:** *These documentation changes have modified the order of the fields in
1878 some record definitions. As a result this release is not compatible with record
1879 or device support binaries that were compiled against earlier releases.*
1881 ### `make test-results` for Windows
1883 The make target `test-results` should now work properly on Windows. Some Perl
1884 installations used versions of `prove.bat` that would only display the results of
1885 up to 3 tests or didn't return an error status in the event of tests failing. The
1886 build system now calls its own perl script to summarize the results instead of
1887 passing a list of TAP filenames to `prove`.
1889 ### Add option to avoid CALLBACK conflict
1891 If a macro `EPICS_NO_CALLBACK` is defined, then callback.h will no longer
1892 (re)define CALLBACK. The name `CALLBACK` is used by the WIN32 API, and
1893 redefinition in callback.h cause errors if some windows headers are later
1896 Code which defines `EPICS_NO_CALLBACK`, but still wishes to use callbacks,
1897 should use the alternate name `epicsCallback` introduced in 3.15.6, 3.16.2, and
1898 7.0.2. It is also possible, though not encouraged, to use `struct callbackPvt`
1899 which has been present since the callback API was introduced.
1901 ### Cleaning up with Multiple CA contexts in a Process
1903 Bruno Martins reported a problem with the CA client library at shutdown in a
1904 process that uses multiple CA client contexts. The first context that triggers
1905 the CA client exit handler prevents any others from being able to clean up
1906 because it resets the ID of an internal epicsThreadPrivate variable which is
1907 shared by all clients. This action has been removed from the client library,
1908 which makes cleanup of clients like this possible.
1910 ### Perl CA bindings fixed for macOS Mojave
1912 Apple removed some Perl header files from macOS Mojave that were available
1913 in their SDK, requiring a change to the include paths used when compiling the
1914 CA bindings. The new version should build on new and older macOS versions, and
1915 these changes may also help other targets that have an incomplete installation
1916 of Perl (the build will continue after printing a warning that the Perl CA
1917 bindings could not be built).
1919 ### Routine `epicsTempName()` removed from libCom
1921 This routine was a simple wrapper around the C89 function `tmpnam()`
1922 which is now seen as unsafe and causes warning messages to be generated by
1923 most modern compilers. The two internal uses of this function have been
1924 modified to call `epicsTempFile()` instead. We were unable to find any
1925 published code that used this function, so it was removed immediately instead
1926 of being deprecated.
1928 ### DBD Parsing of Record Types
1930 The Perl DBD file parser has been made slightly more liberal; the order in
1931 which DBD files must be parsed is now more flexible, so that a record type
1932 definition can now be parsed after a device support that referred to that
1933 record type. A warning message will be displayed when the device support is
1934 seen, but the subsequent loading of the record type will be accepted without
1935 triggering an error. See
1936 [Launchpad bug 1801145](https://bugs.launchpad.net/epics-base/+bug/1801145).
1938 ### menuScan and several record types documented with POD
1940 The EPICS Wiki pages describing a number of standard record types has been
1941 converted into the Perl POD documentation format and added to the DBD files,
1942 so at build-time an HTML version of these documents is generated and installed
1943 into the htmls directory. Thanks to Tony Pietryla.
1945 ### CA client tools learned `-V` option
1947 This displays the version numbers of EPICS Base and the CA protocol.
1951 ## Changes made between 3.15.5 and 3.15.6
1953 ### Unsetting environment variables
1955 The new command `epicsEnvUnset varname` can be used to
1956 unset an environment variable.
1958 ### Warning indicators in msi (and macLib) output
1960 The libCom macro expansion library has been modified so that when the
1961 `SUPPRESS_WARNINGS` flag is set it will no longer include any `,undefined`
1962 or `,recursive` indicators in its output when undefined or recursive
1963 macros are encountered. These indicators were harmless when the output was fed
1964 into an IOC along with a definition for the macro, but when the `msi`
1965 tool was used to generate other kinds of files they caused problems. If the
1966 `msi -V` flag is used the markers will still be present in the output
1967 whenever the appropriate condition is seen.
1969 ### Improvements to msi
1971 In addition to fixing its response to discovering parsing errors in its
1972 substitution input file (reported as Launchpad
1973 [bug 1503661](https://bugs.launchpad.net/epics-base/+bug/1503661))
1974 so it now deletes the incomplete output file, the msi program has been cleaned
1975 up a little bit internally.
1977 ### All array records now post monitors on their array-length fields
1979 The waveform record has been posting monitors on its NORD field since Base
1980 3.15.0.1; we finally got around to doing the equivalent in all the other
1981 built-in record types, which even required modifying device support in some
1983 [Launchpad bug 1730727](https://bugs.launchpad.net/epics-base/+bug/1730727).
1985 ### HOWTO: Converting Wiki Record Reference to POD
1987 Some documentation has been added to the `dbdToHtml.pl` script
1988 explaining how Perl POD (Plain Old Documentation) markup can be added to
1989 `.dbd` files to generate HTML documentation for the record types. To see
1990 these instructions, run `perl bin/<host>/dbdToHtml.pl -H`
1991 or `perldoc bin/<host>/dbdToHtml.pl`.
1993 ### Fix problem with numeric soft events
1995 Changing from numeric to named soft events introduced an incompatibility
1996 when a numeric event 1-255 is converted from a DOUBLE, e.g. from a calc record.
1997 The `post_event()` API is not marked deprecated any more.
1999 Also `scanpel` has been modified to accept a glob pattern for
2000 event name filtering and to show events with no connected records as well.
2002 ### Add `osiSockOptMcastLoop_t` and osiSockTest
2004 Added a new OS-independent typedef for multicast socket options, and a test
2005 file to check their correct operation.
2007 ### Support for `CONFIG_SITE.local` in Base
2009 This feature is mostly meant for use by developers; configuration
2010 settings that would normally appear in `base/configure/CONFIG_SITE` can now
2011 be put in a locally created `base/configure/CONFIG_SITE.local` file instead
2012 of having go modify or replace the original. A new `.gitignore` pattern
2013 tells git to ignore all `configure/*.local` files.
2015 ### Fix broken `EPICS_IOC_LOG_FILE_LIMIT=0` setting
2017 The Application Developers' Guide says this is allowed and disables the
2018 limit on the log-file, but it hasn't actually worked for some time (if ever).
2019 Note that the iocLogServer will be removed from newer Base release sometime
2020 soon as its functionality can be implemented by other dedicated log servers
2021 such as logstash or syslog-ng.
2023 Fixes [lp:1786858](https://bugs.launchpad.net/bugs/1786858)
2024 and part of [lp:1786966](https://bugs.launchpad.net/bugs/1786966).
2026 ### Cleanup of startup directory
2028 The files in the startup directory have not been maintained in recent years
2029 and have grown crufty (technical term). This release includes the following
2030 updates to these files:
2032 - The Perl `EpicsHostArch.pl` script has been rewritten, and support
2033 for a few previously missing host architectures has been added to it.
2034 - The `EpicsHostArch.pl` script has also been moved into the standard
2035 `src/tools` directory, from where it will be installed into
2036 `lib/perl`. In this new location it is no longer executable, so it must
2037 be run by the `perl` executable.
2038 - The build system has been adjusted to look for `EpicsHostArch.pl` in
2039 both places if the `EPICS_HOST_ARCH` environment variable has not been
2041 - Sites that used the original Perl script to set `EPICS_HOST_ARCH` as part of
2042 their standard environment will need to adjust their scripts when they
2043 upgrade to this release.
2044 - The `EpicsHostArch` shell script has been replaced with a wrapper
2045 routine that calls the Perl `EpicsHostArch.pl` script. Sites that rely on
2046 this script to set `EPICS_HOST_ARCH` should consider switching to the
2047 Perl script instead.
2048 - The `Site.cshrc` and `Site.profile` files have been renamed to
2049 `unix.csh` and `unix.sh`, respectively.
2050 - The existing `win32.bat` file has been cleaned up and a new
2051 `windows.bat` file added for 64-bit targets. The contents of these files
2052 should be seen as examples, don't uncomment or install parts for software
2053 that you don't explicitly know that you need.
2055 ### Recent Apple XCode Build Issues
2057 The latest version of XCode will not compile calls to `system()` or
2058 `clock_settime()` for iOS targets. There were several places in Base
2059 where these were being compiled, although there were probably never called. The
2060 code has now been modified to permit iOS builds to complete again.
2062 ### Prevent illegal alarm severities
2064 A check has been added to `recGblResetAlarms()` that prevents records
2065 from getting an alarm severity higher than `INVALID_ALARM`. It is still possible
2066 for a field like HSV to get set to a value that is not a legal alarm severity,
2067 but the core IOC code should never copy such a value into a record's SEVR or
2068 ACKS fields. With this fix the record's alarm severity will be limited to
2071 ### Fixes for Launchpad bugs
2073 The following launchpad bugs have fixes included:
2075 - [lp: 1786320](https://bugs.launchpad.net/epics-base/+bug/1786320), dbCa
2076 subscribes twice to ENUM
2077 - [lp: 541221](https://bugs.launchpad.net/epics-base/+bug/541221),
2078 `assert (pca->pgetNative)` failed in ../dbCa.c
2079 - [lp: 1747091](https://bugs.launchpad.net/epics-base/+bug/1747091),
2080 epicsTimeGetEvent() / generalTime bug
2081 - [lp: 1743076](https://bugs.launchpad.net/epics-base/+bug/1743076), Segfault
2082 in `ca_attach_context()` during exits
2083 - [lp: 1751380](https://bugs.launchpad.net/epics-base/+bug/1751380), Deadlock
2084 in `ca_clear_subscription()`
2085 - [lp: 1597809](https://bugs.launchpad.net/epics-base/+bug/1597809), Setting
2086 NAME field in DB file may break IOC
2087 - [lp: 1770292](https://bugs.launchpad.net/epics-base/+bug/1770292),
2088 `get_alarm_double()` inconsistent across record types
2089 - [lp: 1771298](https://bugs.launchpad.net/epics-base/+bug/1771298),
2090 Conversion of NaN to integer relies on undefined behavior
2092 ### Updated VxWorks Timezone settings
2094 Removed the settings for 2017; fixed the hour of the change for MET.
2096 ### Fixed camonitor server side relative timestamps bug
2098 Initialize the first time-stamp from the first monitor, not the client-side
2099 current time in this configuration.
2101 ### Build changes for MSVC
2103 Windows builds using Visual Studio 2015 and later now use the `-FS`
2104 compiler option to allow parallel builds to work properly.
2106 We now give the `-FC` option to tell the compiler to print absolute
2107 paths for source files in diagnostic messages.
2109 ### Extend maximum Posix epicsEventWaitWithTimeout() delay
2111 The Posix implementation of epicsEventWaitWithTimeout() was limiting the
2112 timeout delay to at most 60 minutes (3600.0 seconds). This has been changed to
2113 10 years; significantly longer maximum delays cause problems on systems where
2114 `time_t` is still a signed 32-bit integer so cannot represent absolute
2115 time-stamps after 2038-01-19. Our assumption is that such 32-bit systems will
2116 have been retired before the year 2028, but some additional tests have been
2117 added to the epicsTimeTest program to detect and fail if this assumption is
2120 ### New test-related make targets
2122 This release adds several new make targets intended for use by developers
2123 and Continuous Integration systems which simplify the task of running the
2124 built-in self-test programs and viewing the results. Since these targets are
2125 intended for limited use they can have requirements for the build host which
2126 go beyond the standard minimum set needed to build and run Base.
2128 #### `test-results` - Summarize test results
2130 The new make target `test-results` will run the self-tests if
2131 necessary to generate a TAP file for each test, then summarizes the TAP output
2132 files in each test directory in turn, displaying the details of any failures.
2133 This step uses the program `prove` which comes with Perl, but also needs
2134 `cat` to be provided in the default search path so will not work on most
2137 #### `junitfiles` - Convert test results to JUnit XML Format
2139 The new make target `junitfiles` will run the self-tests if necessary
2140 and then convert the TAP output files into the more commonly-supported JUnit
2141 XML format. The program that performs this conversion needs the Perl module
2142 `XML::Generator` to have been installed.
2144 #### `clean-tests` - Delete test result files
2146 The new make target `clean-tests` removes any test result files from
2147 previous test runs. It cleans both TAP and JUnit XML files.
2149 ### Fix DNS related crash on exit
2151 The attempt to fix DNS related delays for short lived CLI programs (eg. caget)
2152 in [lp:1527636](https://bugs.launchpad.net/epics-base/+bug/1527636) introduced a
2153 bug which cased these short lived clients to crash on exit. This bug should now
2156 ### Server bind issue on Windows
2158 When a National Instruments network variables CA server is already running on
2159 a Windows system and an IOC or PCAS server is started, the IOC's attempt to
2160 bind a TCP socket to the CA server port number fails, but Windows returns a
2161 different error status value than the IOC is expecting in that circumstance
2162 (because the National Instruments code requests exclusive use of that port,
2163 unlike the EPICS code) so the IOC fails to start properly. The relevent EPICS
2164 bind() checks have now been updated so the IOC will request that a dynamic port
2165 number be allocated for this TCP socket instead when this happens.
2167 ### Checking Periodic Scan Rates
2169 Code has been added to the IOC startup to better protect it against bad
2170 periodic scan rates, including against locales where `.` is not
2171 accepted as a decimal separator character. If the scan period in a menuScan
2172 choice string cannot be parsed, the associated periodic scan thread will no
2173 longer be started by the IOC and a warning message will be displayed at iocInit
2174 time. The `scanppl` command will also flag the faulty menuScan value.
2178 ## Changes made between 3.15.4 and 3.15.5
2180 ### dbStatic Library Speedup and Cleanup
2182 Loading of database files has been optimized to avoid over-proportionally
2183 long loading times for large databases. As a part of this, the alphabetical
2184 ordering of records instances (within a record type) has been dropped. In the
2185 unexpected case that applications were relying on the alphabetic order, setting
2186 `dbRecordsAbcSorted = 1` before loading the databases will retain the
2189 The routine `dbRenameRecord()` has been removed, as it was intended
2190 to be used by database configuration tools linked against a host side version
2191 of the dbStatic library that is not being built anymore.
2193 ### Launchpad Bug-fixes
2195 In addition to the more detailed change descriptions below, the following
2196 Launchpad bugs have also been fixed in this release:
2198 - [lp:1440186](https://bugs.launchpad.net/epics-base/+bug/1440186) Crash due
2199 to a too small buffer being provided in `dbContextReadNotifyCache()`
2200 - [lp:1479316](https://bugs.launchpad.net/epics-base/+bug/1479316) Some data
2201 races found using Helgrind
2202 - [lp:1495833](https://bugs.launchpad.net/epics-base/+bug/1495833) biRecord
2203 prompt groups are nonsensical
2204 - [lp:1606848](https://bugs.launchpad.net/epics-base/+bug/1606848) WSAIoctl
2205 `SIO_GET_INTERFACE_LIST` failed in Windows
2207 ### Whole-Program Optimization for MS Visual Studio Targets
2209 When using the Microsoft compilers a new build system variable is provided that
2210 controls whether whole program optimization is used or not. For static builds
2211 using Visual Studio 2010 this optimization must be disabled. This is controlled
2212 in the files `configure/os/CONFIG_SITE.Common.windows-x64-static` and
2213 `configure/os/CONFIG_SITE.Common.win32-x86-static` by setting the variable
2214 `OPT_WHOLE_PROGRAM=NO` to override the default value `YES` that would otherwise
2217 Note that enabling this optimization slows down the build process. It is not
2218 possible to selectively disable this optimization, when building a particular
2219 module say; Microsoft's linker will restart itself automatically with the
2220 `-LTCG` flag set and display a warning if it is asked to link any object
2221 files that were compiled with the `-GL` flag.
2223 ### Add dynamic (variable length) array support to PCAS
2225 Dynamic array sizing support was added to the IOC server (RSRV) in the
2226 Base-3.14.12 release, but has not until now been supported in the Portable
2227 Channel Access Server (PCAS). Channel Access server applications using the
2228 PCAS may not need to be modified at all; if they already push monitors with
2229 different gdd array lengths, those variable sizes will be forwarded to any CA
2230 clients who have requested variable length updates. The example CAS server
2231 application has been modified to demonstrate this feature.
2233 In implementing the above, the gdd method `gdd::put(const gdd *)` now
2234 copies the full-sized array from the source gdd if the destination gdd is of
2235 type array, has no allocated memory and a boundary size of 0.
2237 ### Additional epicsTime conversion
2239 The EPICS timestamp library (epicsTime) inside libCom's OSI layer has
2240 been extended by routines that convert from `struct tm` to the EPICS
2241 internal `epicsTime` type, assuming UTC - i.e. without going through
2242 the timezone mechanism. This solves issues with converting from the structured
2243 type to the EPICS timestamp at driver level from multiple threads at a high
2244 repetition rate, where the timezone mechanism was blocking on file access.
2246 ### MinGW Cross-builds from Linux
2248 The build configuration files that allow cross-building of the 32-bit
2249 win32-x86-mingw cross-target have been adjusted to default to building shared
2250 libraries (DLLs) as this is now supported by recent MinGW compilers. The 64-bit
2251 windows-x64-mingw cross-target was already being built that way by default. The
2252 configuration options to tell the minGW cross-compiler to link programs with
2253 static versions of the compiler support libraries have now been moved into the
2254 `CONFIG_SITE.linux-x86.<target>` files.
2256 ### General Time updates
2258 The `iocInit` code now performs a sanity check of the current time
2259 returned by the generalTime subsystem and will print a warning if the wall-clock
2260 time returned has not been initialized yet. This is just a warning message; when
2261 a time provider does synchonize the IOC will subsequently pick up and use the
2262 correct time. This check code also primes the registered event system provider
2263 if there is one so the `epicsTimeGetEventInt()` routine will work on IOCs
2264 that ask for event time within an interrupt service routine.
2266 The osiClockTime provider's synchronization thread (which is only used on
2267 some embedded targets) will now poll the other time providers at 1Hz until the
2268 first time it manages to get a successful timestamp, after which it will poll
2269 for updates every 60 seconds as before.
2271 The routine `generalTimeGetExceptPriority()` was designed for use by
2272 backup (lower priority) time providers like the osiClockTime provider which do
2273 not have their own absolute time reference and rely on other providers for an
2274 absolute time source. This routine no longer implements the ratchet mechanism
2275 that prevented the time it returned from going backwards. If the backup clock's
2276 tick-timer runs fast the synchronization of the backup time provider would never
2277 allow it to be corrected backwards when the ratchet was in place. The regular
2278 `epicsTimeGetCurrent()` API still uses the ratchet mechanism, so this
2279 change will not cause the IOC to see time going backwards.
2281 ### Microsoft Visual Studio builds
2283 The build configuration files for builds using the Microsoft compilers have been
2284 updated, although there should be no noticable difference at most sites. One
2285 extra compiler warning is now being suppressed for C++ code, `C4344: behavior
2286 change: use of explicit template arguments results in ...` which is gratuitous
2287 and was appearing frequently in builds of the EPICS V4 modules.
2289 Cross-builds of the windows-x64 target from a win32-x86 host have been
2290 removed as they don't actually work within the context of a single `make`
2291 run. Significant changes to the build configuration files would be necessary for
2292 these kinds of cross-builds to work properly, which could be done if someone
2293 needs them (email Andrew Johnson before working on this, and see
2294 [this stack-overflow answer](http://stackoverflow.com/questions/5807647/how-do-you-compile-32-bit-and-64-bit-applications-at-the-same-time-in-visual-stu) for a starting point).
2296 ### Bazaar keywords such as 'Revision-Id' removed
2298 In preparation for moving to git in place of the Bazaar revision control
2299 system we have removed all the keywords from the Base source code.
2301 ### Linux systemd service file for CA Repeater
2303 Building this version of Base on a Linux system creates a systemd service
2304 file suitable for starting the Channel Access Repeater under systemd. The file
2305 will be installed into the target bin directory, from where it can be copied
2306 into the appropriate systemd location and modified as necessary. Installation
2307 instructions are included as comments in the file.
2311 ## Changes made between 3.15.3 and 3.15.4
2313 ### New string input device support "getenv"
2315 A new "getenv" device support for both the stringin and lsi (long string
2316 input) record types can be used to read the value of an environment variable
2317 from the IOC at runtime. See base/db/softIocExit.db for sample usage.
2319 ### Build rules and `DELAY_INSTALL_LIBS`
2321 A new order-only prerequisite build rule has been added to ensure that
2322 library files (and DLL stubs on Windows) get installed before linking any
2323 executables, which resolves parallel build problems on high-powered CPUs. There
2324 are some (rare) cases though where a Makefile has to build an executable and run
2325 it to be able to compile code for a library built by the same Makefile. With
2326 this new build rule GNUmake will complain about a circular dependency and the
2327 build will probably fail in those cases. To avoid this problem the failing
2328 Makefile should set `DELAY_INSTALL_LIBS = YES` before including the
2329 `$(TOP)/configure/RULES` file, disabling the new build rule.
2331 ### IOC environment variables and build parameters
2333 The IOC now sets a number of environment variables at startup that provide the
2334 version of EPICS Base it was built against (`EPICS_VERSION_...`) and its build
2335 architecture (ARCH). In some cases this allows a single iocBoot/ioc directory to
2336 be used to run the same IOC on several different architectures without any
2339 There are also 3 new environment parameters (`EPICS_BUILD_...`) available that
2340 C/C++ code can use to find out the target architecture, OS class and compiler
2341 class it was built with. These may be useful when writing interfaces to other
2344 ### New implementation of `promptgroup`/`gui_group` field property
2346 The mechanism behind the `promptgroup()` field property inside a record type
2347 definition has been changed. Instead of using a fixed set of choices,
2348 the static database access library now collects the used gui group names
2349 while parsing DBD information. Group names should start with a two-digit number
2350 plus space-dash-space to allow proper sorting of groups.
2352 The include file `guigroup.h` that defined the fixed set of choices
2353 has been deprecated. Instead, use the conversion functions between index number
2354 and group string that have been added to dbStaticLib.
2356 When a DBD file containing record-type descriptions is expanded, any
2357 old-style `GUI_xxx` group names will be replaced by a new-style
2358 string for use by the IOC. This permits an older record type to be used with
2359 the 3.15.4 release, although eventually record types should be converted by
2360 hand with better group names used.
2362 ### CA server configuration changes
2364 RSRV now honors `EPICS_CAS_INTF_ADDR_LIST` and binds only to the provided list
2365 of network interfaces. Name searches (UDP and TCP) on other network interfaces
2366 are ignored. For example on a computer with interfaces 10.5.1.1/24, 10.5.2.1/24,
2367 and 10.5.3.1/24, setting `EPICS_CAS_INTF_ADDR_LIST='10.5.1.1 10.5.2.1'` will
2368 accept traffic on the .1.1 and .2.1, but ignore from .3.1
2370 RSRV now honors `EPICS_CAS_IGNORE_ADDR_LIST` and ignores UDP messages received
2371 from addresses in this list.
2373 Previously, CA servers (RSRV and PCAS) would build the beacon address list using
2374 `EPICS_CA_ADDR_LIST` if `EPICS_CAS_BEACON_ADDR_LIST` was no set. This is no
2375 longer done. Sites depending on this should set both environment variables to
2378 ### IPv4 multicast for name search and beacons
2380 libca, RSRV, and PCAS may now use IPv4 multicasting for UDP traffic (name search
2381 and beacons). This is disabled by default. To enable multicast address(s) must
2382 be listed in `EPICS_CA_ADDR_LIST` for clients and `EPICS_CAS_INTF_ADDR_LIST` for
2383 servers (IOCs should set both). For example:
2385 EPICS_CAS_INTF_ADDR_LIST='224.0.2.9' EPICS_CA_ADDR_LIST=224.0.2.9
2387 Please note that no IPv4 multicast address is officially assigned for Channel
2388 Access by IANA. The example 224.0.2.9 is taken from the AD-HOC Block I range.
2390 ### Moved `mlockall()` into its own epicsThread routine
2392 Since EPICS Base 3.15.0.2 on Posix OSs the initialization of the epicsThread
2393 subsystem has called `mlockall()` when the OS supports it and thread
2394 priority scheduling is enabled. Doing so has caused problems in third-party
2395 applications that call the CA client library, so the functionality has been
2396 moved to a separate routine `epicsThreadRealtimeLock()` which will be
2397 called by the IOC at iocInit (unless disabled by setting the global variable
2398 `dbThreadRealtimeLock` to zero).
2400 ### Added dbQuietMacroWarnings control
2402 When loading database files, macros get expanded even on comment lines. If a
2403 comment contains an undefined macro, the load still continues but an error
2404 message gets printed. For this release the error message has been changed to a
2405 warning, but even this warning can be made less verbose by setting this new
2406 variable to a non-zero value before loading the file, like this:
2409 var dbQuietMacroWarnings 1 iocsh
2410 dbQuietMacroWarnings=1 VxWorks
2413 This was [Launchpad bug
2414 541119](https://bugs.launchpad.net/bugs/541119).
2418 ## Changes from the 3.14 branch between 3.15.3 and 3.15.4
2420 ### NTP Time Provider adjusts to OS tick rate changes
2422 Dirk Zimoch provided code that allows the NTP Time provider (used on VxWorks
2423 and RTEMS only) to adapt to changes in the OS clock tick rate after the provider
2424 has been initialized. Note that changing the tick rate after iocInit() is not
2425 advisable, and that other software might still misbehave if initialized before
2426 an OS tick rate change. This change was back-ported from the 3.15 branch.
2428 ### Making IOC `ca_get` operations atomic
2430 When a CA client gets data from an IOC record using a compound data type such
2431 as `DBR_TIME_DOUBLE` the value field is fetched from the database in a
2432 separate call than the other metadata, without keeping the record locked. This
2433 allows some other thread such as a periodic scan thread a chance to interrupt
2434 the get operation and process the record in between. CA monitors have always
2435 been atomic as long as the value data isn't a string or an array, but this race
2436 condition in the CA get path has now been fixed so the record will stay locked
2437 between the two fetch operations.
2440 [Launchpad bug 1581212](https://bugs.launchpad.net/epics-base/+bug/1581212),
2441 thanks to Till Strauman and Dehong Zhang.
2443 ### New `CONFIG_SITE` variable for running self-tests
2445 The 'make runtests' and 'make tapfiles' build targets normally only run the
2446 self-tests for the main `EPICS_HOST_ARCH` architecture. If the host is
2447 able to execute self-test programs for other target architectures that are being
2448 built by the host, such as when building a `-debug` version of the host
2449 architecture for example, the names of those other architectures can be added to
2450 the new `CROSS_COMPILER_RUNTEST_ARCHS` variable in either the
2451 `configure/CONFIG_SITE` file or in an appropriate
2452 `configure/os/CONFIG_SITE.<host>.Common` file to have the test
2453 programs for those targets be run as well.
2455 ### Additional RELEASE file checks
2457 An additional check has been added at build-time for the contents of the
2458 `configure/RELEASE` file(s), which will mostly only affect users of the Debian
2459 EPICS packages published by NSLS-2. Support modules may share an install path,
2460 but all such modules must be listed adjacent to each other in any `RELEASE`
2461 files that point to them. For example the following will fail the new checks:
2464 AUTOSAVE = /usr/lib/epics
2465 ASYN = /home/mdavidsaver/asyn
2466 EPICS_BASE = /usr/lib/epics
2469 giving the compile-time error
2472 This application's RELEASE file(s) define
2473 EPICS_BASE = /usr/lib/epics
2474 after but not adjacent to
2475 AUTOSAVE = /usr/lib/epics
2476 Module definitions that share paths must be grouped together.
2477 Either remove a definition, or move it to a line immediately
2478 above or below the other(s).
2479 Any non-module definitions belong in configure/CONFIG_SITE.
2482 In many cases such as the one above the order of the `AUTOSAVE` and
2483 `ASYN` lines can be swapped to let the checks pass, but if the
2484 `AUTOSAVE` module depended on `ASYN` and hence had to appear
2485 before it in the list this error indicates that `AUTOSAVE` should also be
2486 built in its own private area; a shared copy would likely be incompatible with
2487 the version of `ASYN` built in the home directory.
2489 ### String field buffer overflows
2491 Two buffer overflow bugs that can crash the IOC have been fixed, caused by
2492 initializing a string field with a value larger than the field size
2493 ([Launchpad bug 1563191](https://bugs.launchpad.net/bugs/1563191)).
2495 ### Fixed stack corruption bug in epicsThread C++ API
2497 The C++ interface to the epicsThread API could corrupt the stack on thread
2498 exit in some rare circumstances, usually at program exit. This bug has been
2499 fixed ([Launchpad bug 1558206](https://bugs.launchpad.net/bugs/1558206)).
2501 ### RTEMS NTP Support Issue
2503 On RTEMS the NTP Time Provider could in some circumstances get out of sync
2504 with the server because the `osdNTPGet()` code wasn't clearing its input socket
2505 before sending out a new request. This
2506 ([Launchpad bug 1549908](https://bugs.launchpad.net/bugs/1549908))
2509 ### CALC engine bitwise operator fixes
2511 The bitwise operators in the CALC engine have been modified to work properly
2512 with values that have bit 31 (0x80000000) set. This modification involved
2513 back-porting some earlier changes from the 3.15 branch, and fixes
2514 [Launchpad bug 1514520](https://code.launchpad.net/bugs/1514520).
2516 ### Fix `ipAddrToAsciiAsync()`: Don't try to join the daemon thread
2518 On process exit, don't try to stop the worker thread that makes DNS lookups
2519 asynchronous. Previously this would wait for any lookups still in progress,
2520 delaying the exit unnecessarily. This was most obvious with catools (eg.
2522 [lp:1527636](https://bugs.launchpad.net/bugs/1527636)
2524 ### Fix `epicsTime_localtime()` on Windows
2526 Simpler versions of the `epicsTime_gmtime()` and `epicsTime_localtime()`
2527 routines have been included in the Windows implementations, and a new test
2528 program added. The original versions do not report DST status properly. Fixes
2529 [Launchpad bug 1528284](https://bugs.launchpad.net/bugs/1528284).