618 lines
28 KiB
HTML
618 lines
28 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
|
"http://www.w3.org/TR/html4/loose.dtd">
|
|
<html>
|
|
<head>
|
|
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
|
|
<title>EPICS Base R3.16.1 Release Notes</title>
|
|
</head>
|
|
|
|
<body lang="en">
|
|
<h1 align="center">EPICS Base Release 3.16.1</h1>
|
|
|
|
<p style="color:red">This version of EPICS Base has not been released yet.</p>
|
|
|
|
|
|
<h2 align="center">Changes made on the 3.16 branch since 3.16.0.1</h2>
|
|
<!-- Insert new items immediately below this template ...
|
|
|
|
<h3>Title...</h3>
|
|
|
|
<p>Description</p>
|
|
|
|
-->
|
|
|
|
<h3>Add EPICS_CA_MCAST_TTL</h3>
|
|
|
|
<p>Add option EPICS_CA_MCAST_TTL to set the Time To Live (TTL) of any IP multi-cast
|
|
CA search or beacon packets sent.</p>
|
|
|
|
<h3>EPICS_CA_MAX_ARRAY_BYTES is optional</h3>
|
|
|
|
<p>
|
|
A new configuration environment variable EPICS_CA_AUTO_ARRAY_BYTES is used by libca and RSRV
|
|
(CA clients and IOC CA server).
|
|
The default EPICS_CA_AUTO_ARRAY_BYTES=YES removes the limitation of EPICS_CA_MAX_ARRAY_BYTES
|
|
and always attempts to allocate sufficient for a request.
|
|
The value of EPICS_CA_MAX_ARRAY_BYTES is ignored.</>
|
|
|
|
<p>Explicitly setting EPICS_CA_AUTO_ARRAY_BYTES=NO continues to honor EPICS_CA_AUTO_ARRAY_BYTES
|
|
as in previous releases.</p>
|
|
|
|
<p>The PCAS server (used by cagateway) now always acts as if EPICS_CA_AUTO_ARRAY_BYTES=YES were
|
|
set.</p>
|
|
|
|
<h3>Channel Access "modernization"</h3>
|
|
|
|
<p>Drop support for CA clients advertising protocol versions less than 4.</p>
|
|
|
|
<p>This effects clients from Base older than 3.12.0-beta1.
|
|
Newer clients will continue to be able to connect to older servers.
|
|
Older clients will be ignored by newer servers.</p>
|
|
|
|
<p>This allows removal of UDP echo and similar protocol features which
|
|
are not compatible with secure protocol design practice.</p>
|
|
|
|
<h3>Echoless comments in iocsh</h3>
|
|
|
|
<p>The way comments are parsed by the iocsh interpreter has changed. The
|
|
interpreter can be selectively disabled from echoing comments coming from
|
|
a script by starting those lines with '#-' rather than just '#'.</p>
|
|
|
|
|
|
<h3>Typed record support methods</h3>
|
|
|
|
<p>The table of record support functions (rset methods for short) no longer
|
|
has entries of type <tt>RECSUPFUN</tt> (which says: any number and type of
|
|
arguments). Instead, rset methods are now typed by default. The
|
|
<tt>RECSUPFUN</tt> typedef has been deprecated and casts to it as well as
|
|
using the untyped <tt>struct rset</tt> will create compilation warnings.</p>
|
|
|
|
<p>Existing code (e.g. external record supports) will generate such
|
|
warnings when compiled against this version of Base, but it will work
|
|
without changes.</p>
|
|
|
|
<p>For a conversion period, the new typed rset definitions are activated
|
|
by defining <tt>USE_TYPED_RSET</tt>, preferably by setting
|
|
<tt>USR_CPPFLAGS += -DUSE_TYPED_RSET</tt> inside a Makefile.
|
|
After activating the new typed rset in this way and making the following
|
|
changes, the result should still compile and work properly against older
|
|
versions of Base.</p>
|
|
|
|
<p>The first parameter of <tt>init_record</tt> and <tt>process</tt> has been
|
|
changed to <tt>struct dbCommon *</tt>. Record types that use
|
|
<tt>void*</tt> here should be changed to use <tt>struct dbCommon*</tt>, and
|
|
cast the argument to their own <tt>xxxRecord *</tt>.</p>
|
|
|
|
<p>When compiled against this release, compiler warnings about incompatible
|
|
types for the method pointers should be taken seriously. When compiled
|
|
against older versions of base, such warnings are unavoidable.</p>
|
|
|
|
<p>Record types written in C++ need to take more drastic measures because of
|
|
the stricter type checking in C++. To remain compatible with older versions
|
|
of base you need something like:</p>
|
|
|
|
<blockquote><pre>
|
|
#include "epicsVersion.h"
|
|
#ifdef VERSION_INT
|
|
#if EPICS_VERSION_INT < VERSION_INT(3,16,0,2)
|
|
#define RECSUPFUN_CAST (RECSUPFUN)
|
|
#else
|
|
#define RECSUPFUN_CAST
|
|
#endif
|
|
#else
|
|
#define RECSUPFUN_CAST (RECSUPFUN)
|
|
#endif
|
|
</pre></blockquote>
|
|
|
|
<p>and then replace <tt>(RECSUPFUN)</tt> with <tt>RECSUPFUN_CAST</tt>
|
|
when initializing the rset.
|
|
Further changes might be needed, e.g. to adapt <tt>const</tt>-ness of
|
|
method parameters.</p>
|
|
|
|
<hr>
|
|
|
|
<h2 align="center">Changes made between 3.15.3 and 3.16.0.1</h2>
|
|
|
|
<h3>Build support for CapFast and dbst removed</h3>
|
|
|
|
<p>The build rules associated with the CapFast-related tools <tt>sch2edif</tt>
|
|
and <tt>e2db</tt> and the <q>database optimization</q> tool <tt>dbst</tt> have
|
|
been removed, along with the <tt>DB_OPT</tt> build configuration variable.</p>
|
|
|
|
<h3>compressRecord buffering order</h3>
|
|
|
|
<p>The compressRecord has a new field <tt>BALG</tt> which can select between
|
|
FIFO (append) and LIFO (prepend) ordering for insertion of new elements. FIFO
|
|
ordering is the default, matching the behviour of previous versions.</p>
|
|
|
|
<h3>Valgrind Instrumentation</h3>
|
|
|
|
<p>Valgrind is a software debugging suite provided by many Linux distributions.
|
|
The header valgrind/valgrind.h is now included in, and installed by, Base.
|
|
When included by a C or C++ source file this header defines some macros which
|
|
expand to provide hints to the Valgrind runtime.
|
|
These have no effect on normal operation of the software, but when run using the
|
|
valgrind tool they can help to find memory leaks and buffer overflows.
|
|
Suitable hints have been added to several free-lists within libCom, including
|
|
freeListLib, allowing valgrind to provide more accurate information about the
|
|
source of potential leaks.</p>
|
|
|
|
<p>valgrind.h automatically disables itself when the build target is not
|
|
supported by the valgrind tool.
|
|
It can also explicitly be disabled by defining the macro <em>NVALGRIND</em>.
|
|
See <em>src/libCom/Makefile</em> for a commented-out example.</p>
|
|
|
|
<p>As a matter of policy valgrind.h will never be included by any header file
|
|
installed by Base, so its use will remain purely an implementation
|
|
detail hidden from application software.
|
|
Support modules which choose to use valgrind.h are advised to do
|
|
likewise.</p>
|
|
|
|
<h3>Database Multi-locking</h3>
|
|
|
|
<p>The IOC record locking code has been re-written with an expanded API; global
|
|
locks are no longer required by the IOC database implementation.</p>
|
|
|
|
<p>The new API functions center around dbScanLockMany(), which behaves like
|
|
dbScanLock() applied to an arbitrary group of records. dbLockerAlloc() is used
|
|
to prepare a list or record pointers, then dbScanLockMany() is called. When it
|
|
returns, all of the records listed may be accessed (in any order) until
|
|
dbScanUnlockMany() is called.</p>
|
|
|
|
<p>The Application Developer's Guide has been updated to describe the API and
|
|
implementation is more detail.</p>
|
|
|
|
<p>Previously a global mutex 'lockSetModifyLock' was locked and unlocked during
|
|
dbScanLock(), acting as a sequencing point for otherwise unrelated calls. The
|
|
new dbLock.c implementation does not include any global mutex in dbScanLock() or
|
|
dbScanLockMany(). Locking/unlocking of unrelated lock sets is now completely
|
|
concurrent.</p>
|
|
|
|
<h3>Generate Version Header</h3>
|
|
|
|
<p>A Perl script and Makefile rules have been added to allow modules to generate
|
|
a C header file with a macro defined with an automatically updated identifier.
|
|
This is a VCS revision ID (Darcs, Git, Mercurial, Subversion, and Bazaar are
|
|
supported) or the date/time of the build if no VCS system is in use.</p>
|
|
|
|
<p>The makeBaseApp example template has been updated with a new device support
|
|
which makes this identifier visible via a lsi (long string input) record.</p>
|
|
|
|
<h3>epicsTime API return status</h3>
|
|
|
|
<p>The epicsTime routines that used to return epicsTimeERROR now return a
|
|
specific S_time_ status value, allowing the caller to discover the reason for
|
|
any failure. The identifier <tt>epicsTimeERROR</tt> is no longer defined, so any
|
|
references to it in source code will no longer compile. The identifier
|
|
epicsTimeOK still exists and has the value 0 as before, so most code that uses
|
|
these APIs can be changed in a way that is backwards-compatible with the
|
|
previous return status.</p>
|
|
|
|
<p>Time providers that have to return a status value and still need to be built
|
|
with earlier versions of Base can define the necessary status symbols like
|
|
this:</p>
|
|
|
|
<blockquote><pre>
|
|
#include "epicsTime.h"
|
|
|
|
#ifndef M_time
|
|
/* S_time_... status values were not provided before Base 3.16 */
|
|
#define S_time_unsynchronized epicsTimeERROR
|
|
#define S_time_...whatever... epicsTimeERROR
|
|
#endif
|
|
</pre></blockquote>
|
|
|
|
<h3>Refactoring of epicsReadline</h3>
|
|
|
|
<p>The epicsReadline code has been reorganized to allow the commandline history
|
|
editor to be disabled at runtime. The EPICS_COMMANDLINE_LIBRARY build setting
|
|
still selects the preferred editor, but the new <tt>IOCSH_HISTEDIT_DISABLE</tt>
|
|
environment variable can be set at runtime to disable history editing and make
|
|
the IOC or other program use the basic editor instead. This is useful when
|
|
starting and controlling an IOC from another program through its stdin and
|
|
stdout streams since history editors often insert invisible escape codes into
|
|
the stdout stream, making it hard to parse.</p>
|
|
|
|
<h3>Callback subsystem API</h3>
|
|
|
|
<p>Added a new macro <tt>callbackGetPriority(prio, callback)</tt> to the
|
|
callback.h header and removed the need for dbScan.c to reach into the internals
|
|
of its CALLBACK objects.</p>
|
|
|
|
|
|
<h2 align="center">Changes from the 3.15 branch since 3.15.5</h2>
|
|
|
|
<!-- Insert inherited items immediately below here ... -->
|
|
|
|
<h2 align="center">Changes from the 3.14 branch since 3.15.5</h2>
|
|
|
|
<!-- Insert inherited items immediately below here ... -->
|
|
|
|
<h3>Fix DNS related crash on exit</h3>
|
|
|
|
<p>The attempt to fix DNS related delays for short lived CLI programs (eg. caget)
|
|
in lp:1527636 introduced a bug which cased these short lived clients to crash on exit.
|
|
This bug should now be fixed.</p>
|
|
|
|
<h3>Server bind issue on Windows</h3>
|
|
|
|
<p>When a National Instruments network variables CA server is already running on
|
|
a Windows system and an IOC or PCAS server is started, the IOC's attempt to
|
|
bind a TCP socket to the CA server port number fails, but Windows returns a
|
|
different error status value than the IOC is expecting in that circumstance
|
|
(because the National Instruments code requests exclusive use of that port,
|
|
unlike the EPICS code) so the IOC fails to start properly. The relevent EPICS
|
|
bind() checks have now been updated so the IOC will request that a dynamic port
|
|
number be allocated for this TCP socket instead when this happens.</p>
|
|
|
|
<h3>Checking Periodic Scan Rates</h3>
|
|
|
|
<p>Code has been added to the IOC startup to better protect it against bad
|
|
periodic scan rates, including against locales where <q><tt>.</tt></q> is not
|
|
accepted as a decimal separator character. If the scan period in a menuScan
|
|
choice string cannot be parsed, the associated periodic scan thread will no
|
|
longer be started by the IOC and a warning message will be displayed at iocInit
|
|
time. The <tt>scanppl</tt> command will also flag the faulty menuScan value.</p>
|
|
|
|
|
|
<h2 align="center">Changes made between 3.15.4 and 3.15.5</h2>
|
|
|
|
<h3>dbStatic Library Speedup and Cleanup</h3>
|
|
|
|
<p>Loading of database files has been optimized to avoid overproportionally
|
|
long loading times for large databases. As a part of this, the alphabetical
|
|
ordering of records instances (within a record type) has been dropped. In the
|
|
unexpected case that applications were relying on the alphabetic order, setting
|
|
<tt>dbRecordsAbcSorted = 1</tt> before loading the databases will retain the
|
|
old behavior.</p>
|
|
|
|
<p>The routine <tt>dbRenameRecord()</tt> has been removed, as it was intended
|
|
to be used by database configuration tools linked against a host side version
|
|
of the dbStatic library that is not being built anymore.</p>
|
|
|
|
<h3>Launchpad Bug-fixes</h3>
|
|
|
|
<p>In addition to the more detailed change descriptions below, the following
|
|
Launchpad bugs have also been fixed in this release:</p>
|
|
|
|
<ul>
|
|
<li><a href="https://bugs.launchpad.net/epics-base/+bug/1440186">
|
|
#1440186</a> Crash due to a too small buffer being provided in
|
|
dbContextReadNotifyCache</li>
|
|
<li><a href="https://bugs.launchpad.net/epics-base/+bug/1479316">
|
|
#1479316</a> Some data races found using Helgrind</li>
|
|
<li><a href="https://bugs.launchpad.net/epics-base/+bug/1495833">
|
|
#1495833</a> biRecord prompt groups are nonsensical</li>
|
|
<li><a href="https://bugs.launchpad.net/epics-base/+bug/1606848">
|
|
#1606848</a> WSAIoctl SIO_GET_INTERFACE_LIST failed in Windows</li>
|
|
</ul>
|
|
|
|
<h3>Whole-Program Optimization for MS Visual Studio Targets</h3>
|
|
|
|
<p>When using the Microsoft compilers a new build system variable is provided
|
|
that controls whether whole program optimization is used or not. For static
|
|
builds using Visual Studio 2010 this optimization must be disabled. This is
|
|
controlled in the files configure/os/CONFIG_SITE.Common.windows-x64-static and
|
|
configure/os/CONFIG_SITE.Common.win32-x86-static by setting the variable
|
|
<tt>OPT_WHOLE_PROGRAM = NO</tt> to override the default value
|
|
<tt>YES</tt> that would otherwise be used.</p>
|
|
|
|
<p>Note that enabling this optimization slows down the build process. It is not
|
|
possible to selectively disable this optimization, when building a particular
|
|
module say; Microsoft's linker will restart itself automatically with the
|
|
<tt>-LTCG</tt> flag set and display a warning if it is asked to link any object
|
|
files that were compiled with the <tt>-GL</tt> flag.</p>
|
|
|
|
<h3>Add dynamic (variable length) array support to PCAS</h3>
|
|
|
|
<p>Dynamic array sizing support was added to the IOC server (RSRV) in the
|
|
Base-3.14.12 release, but has not until now been supported in the <q>Portable
|
|
Channel Access Server</q> (PCAS). Channel Access server applications using the
|
|
PCAS may not need to be modified at all; if they already push monitors with
|
|
different gdd array lengths, those variable sizes will be forwarded to any CA
|
|
clients who have requested variable length updates. The example CAS server
|
|
application has been modified to demonstrate this feature.</p>
|
|
|
|
<p>In implementing the above, the gdd method <tt>gdd::put(const gdd *)</tt> now
|
|
copies the full-sized array from the source gdd if the destination gdd is of
|
|
type array, has no allocated memory and a boundary size of 0.</p>
|
|
|
|
<h3>Additional epicsTime conversion</h3>
|
|
|
|
<p>The EPICS timestamp library (epicsTime) inside libCom's OSI layer has
|
|
been extended by routines that convert from <tt>struct tm</tt> to the EPICS
|
|
internal <tt>epicsTime</tt> type, assuming UTC - i.e. without going through
|
|
the timezone mechanism. This solves issues with converting from the structured
|
|
type to the EPICS timestamp at driver level from multiple threads at a high
|
|
repetition rate, where the timezone mechanism was blocking on file access.</p>
|
|
|
|
<h3>MinGW Cross-builds from Linux</h3>
|
|
|
|
<p>The build configuration files that allow cross-building of the 32-bit
|
|
win32-x86-mingw cross-target have been adjusted to default to building shared
|
|
libraries (DLLs) as this is now supported by recent MinGW compilers. The 64-bit
|
|
windows-x64-mingw cross-target was already being built that way by default. The
|
|
configuration options to tell the minGW cross-compiler to link programs with
|
|
static versions of the compiler support libraries have now been moved into the
|
|
CONFIG_SITE.linux-x86.<i>target</i> files.</p>
|
|
|
|
<h3>General Time updates</h3>
|
|
|
|
<p>The <tt>iocInit</tt> code now performs a sanity check of the current time
|
|
returned by the generalTime subsystem and will print a warning if the wall-clock
|
|
time returned has not been initialized yet. This is just a warning message; when
|
|
a time provider does synchonize the IOC will subsequently pick up and use the
|
|
correct time. This check code also primes the registered event system provider
|
|
if there is one so the <tt>epicsTimeGetEventInt()</tt> routine will work on IOCs
|
|
that ask for event time within an interrupt service routine.</p>
|
|
|
|
<p>The osiClockTime provider's synchronization thread (which is only used on
|
|
some embedded targets) will now poll the other time providers at 1Hz until the
|
|
first time it manages to get a successful timestamp, after which it will poll
|
|
for updates every 60 seconds as before.</p>
|
|
|
|
<p>The routine <tt>generalTimeGetExceptPriority()</tt> was designed for use by
|
|
backup (lower priority) time providers like the osiClockTime provider which do
|
|
not have their own absolute time reference and rely on other providers for an
|
|
absolute time source. This routine no longer implements the ratchet mechanism
|
|
that prevented the time it returned from going backwards. If the backup clock's
|
|
tick-timer runs fast the synchronization of the backup time provider would never
|
|
allow it to be corrected backwards when the ratchet was in place. The regular
|
|
<tt>epicsTimeGetCurrent()</tt> API still uses the ratchet mechanism, so this
|
|
change will not cause the IOC to see time going backwards.</p>
|
|
|
|
<h3>Microsoft Visual Studio builds</h3>
|
|
|
|
<p>The build configuration files for builds using the Microsoft compilers have
|
|
been updated, although there should be no noticable difference at most sites.
|
|
One extra compiler warning is now being suppressed for C++ code, <tt>C4344:
|
|
behavior change: use of explicit template arguments results in ...</tt> which is
|
|
gratuitous and was appearing frequently in builds of the EPICS V4 modules.</p>
|
|
|
|
<p>Cross-builds of the windows-x64 target from a win32-x86 host have been
|
|
removed as they don't actually work within the context of a single <tt>make</tt>
|
|
run. Significant changes to the build configuration files would be necessary for
|
|
these kinds of cross-builds to work properly, which could be done if someone
|
|
needs them (email Andrew Johnson before working on this, and see
|
|
<a href="http://stackoverflow.com/questions/5807647/how-do-you-compile-32-bit-and-64-bit-applications-at-the-same-time-in-visual-stu">
|
|
this stack-overflow answer</a> for a starting point).</p>
|
|
|
|
<h3>Bazaar keywords such as 'Revision-Id' removed</h3>
|
|
|
|
<p>In preparation for moving to git in place of the Bazaar revision control
|
|
system we have removed all the keywords from the Base source code.</p>
|
|
|
|
<h3>Linux systemd service file for CA Repeater</h3>
|
|
|
|
<p>Building this version of Base on a Linux system creates a systemd service
|
|
file suitable for starting the Channel Access Repeater under systemd. The file
|
|
will be installed into the target bin directory, from where it can be copied
|
|
into the appropriate systemd location and modified as necessary. Installation
|
|
instructions are included as comments in the file.</p>
|
|
|
|
|
|
<h2 align="center">Changes made between 3.15.3 and 3.15.4</h2>
|
|
|
|
<h3>New string input device support "getenv"</h3>
|
|
|
|
<p>A new "getenv" device support for both the stringin and lsi (long string
|
|
input) record types can be used to read the value of an environment variable
|
|
from the IOC at runtime. See base/db/softIocExit.db for sample usage.</p>
|
|
|
|
<h3>Build rules and DELAY_INSTALL_LIBS</h3>
|
|
|
|
<p>A new order-only prerequisite build rule has been added to ensure that
|
|
library files (and DLL stubs on Windows) get installed before linking any
|
|
executables, which resolves parallel build problems on high-powered CPUs. There
|
|
are some (rare) cases though where a Makefile has to build an executable and run
|
|
it to be able to compile code for a library built by the same Makefile. With
|
|
this new build rule GNUmake will complain about a circular dependency and the
|
|
build will probably fail in those cases. To avoid this problem the failing
|
|
Makefile should set <tt>DELAY_INSTALL_LIBS = YES</tt> before including the
|
|
<tt>$(TOP)/configure/RULES</tt> file, disabling the new build rule.</p>
|
|
|
|
<h3>IOC environment variables and build parameters</h3>
|
|
|
|
<p>The IOC now sets a number of environment variables at startup that provide
|
|
the version of EPICS Base it was built against (EPICS_VERSION_...) and its build
|
|
architecture (ARCH). In some cases this allows a single iocBoot/ioc directory to
|
|
be used to run the same IOC on several different architectures without any
|
|
changes.</p>
|
|
|
|
<p>There are also 3 new environment parameters (EPICS_BUILD_...) available that
|
|
C/C++ code can use to find out the target architecture, OS class and compiler
|
|
class it was built with. These may be useful when writing interfaces to other
|
|
languages.</p>
|
|
|
|
<h3>New implementation of promptgroup/gui_group field property</h3>
|
|
|
|
<p>The mechanism behind the "promptgroup()" field property inside a record type
|
|
definition has been changed. Instead of using a fixed set of choices,
|
|
the static database access library now collects the used gui group names
|
|
while parsing DBD information. Group names should start with a two-digit number
|
|
plus space-dash-space to allow proper sorting of groups.</p>
|
|
|
|
<p>The include file <tt>guigroup.h</tt> that defined the fixed set of choices
|
|
has been deprecated. Instead, use the conversion functions between index number
|
|
and group string that have been added to dbStaticLib.</p>
|
|
|
|
<p>When a DBD file containing record-type descriptions is expanded, any
|
|
old-style <tt>GUI_xxx</tt> group names will be replaced by a new-style
|
|
string for use by the IOC. This permits an older record type to be used with
|
|
the 3.15.4 release, although eventually record types should be converted by
|
|
hand with better group names used.</p>
|
|
|
|
<h3>CA server configuration changes</h3>
|
|
|
|
<p>RSRV now honors EPICS_CAS_INTF_ADDR_LIST and binds only to the provided list
|
|
of network interfaces. Name searches (UDP and TCP) on other network interfaces
|
|
are ignored. For example on a computer with interfaces 10.5.1.1/24, 10.5.2.1/24,
|
|
and 10.5.3.1/24, setting "EPICS_CAS_INTF_ADDR_LIST='10.5.1.1 10.5.2.1'" will
|
|
accept traffic on the .1.1 and .2.1, but ignore from .3.1</p>
|
|
|
|
<p>RSRV now honors EPICS_CAS_IGNORE_ADDR_LIST and ignores UDP messages received
|
|
from addresses in this list.</p>
|
|
|
|
<p>Previously, CA servers (RSRV and PCAS) would build the beacon address list
|
|
using EPICS_CA_ADDR_LIST if EPICS_CAS_BEACON_ADDR_LIST was no set. This is no
|
|
longer done. Sites depending on this should set both envronment variables to the
|
|
same value.</p>
|
|
|
|
<h3>IPv4 multicast for name search and beacons</h3>
|
|
|
|
<p>libca, RSRV, and PCAS may now use IPv4 multicasting for UDP traffic (name
|
|
search and beacons). This is disabled by default. To enable multicast address(s)
|
|
must be listed in EPICS_CA_ADDR_LIST for clients and EPICS_CAS_INTF_ADDR_LIST
|
|
for servers (IOCs should set both). For example:
|
|
"EPICS_CAS_INTF_ADDR_LIST='224.0.2.9' EPICS_CA_ADDR_LIST=224.0.2.9".</p>
|
|
|
|
<p>Please note that no IPv4 multicast address is officially assigned for Channel
|
|
Access by IANA. The example 224.0.2.9 is taken from the AD-HOC Block I range.<p>
|
|
|
|
<h3>Moved <tt>mlockall()</tt> into its own epicsThread routine</h3>
|
|
|
|
<p>Since EPICS Base 3.15.0.2 on Posix OSs the initialization of the epicsThread
|
|
subsystem has called <tt>mlockall()</tt> when the OS supports it and thread
|
|
priority scheduling is enabled. Doing so has caused problems in third-party
|
|
applications that call the CA client library, so the functionality has been
|
|
moved to a separate routine <tt>epicsThreadRealtimeLock()</tt> which will be
|
|
called by the IOC at iocInit (unless disabled by setting the global variable
|
|
<tt>dbThreadRealtimeLock</tt> to zero).</p>
|
|
|
|
<h3>Added dbQuietMacroWarnings control</h3>
|
|
|
|
<p>When loading database files, macros get expanded even on comment lines. If a
|
|
comment contains an undefined macro, the load still continues but an error
|
|
message gets printed. For this release the error message has been changed to a
|
|
warning, but even this warning can be made less verbose by setting this new
|
|
variable to a non-zero value before loading the file, like this:</p>
|
|
|
|
<blockquote><pre>
|
|
var dbQuietMacroWarnings 1 <i>iocsh</i>
|
|
dbQuietMacroWarnings=1 <i>VxWorks</i>
|
|
</pre></blockquote>
|
|
|
|
<p>This was <a href="https://bugs.launchpad.net/bugs/541119">Launchpad bug
|
|
541119</a>.</p>
|
|
|
|
|
|
<h2 align="center">Changes from the 3.14 branch between 3.15.3 and 3.15.4</h2>
|
|
|
|
<h3>NTP Time Provider adjusts to OS tick rate changes</h3>
|
|
|
|
<p>Dirk Zimoch provided code that allows the NTP Time provider (used on VxWorks
|
|
and RTEMS only) to adapt to changes in the OS clock tick rate after the provider
|
|
has been initialized. Note that changing the tick rate after iocInit() is not
|
|
advisable, and that other software might still misbehave if initialized before
|
|
an OS tick rate change. This change was back-ported from the 3.15 branch.</p>
|
|
|
|
<h3>Making IOC ca_get operations atomic</h3>
|
|
|
|
<p>When a CA client gets data from an IOC record using a compound data type such
|
|
as <tt>DBR_TIME_DOUBLE</tt> the value field is fetched from the database in a
|
|
separate call than the other metadata, without keeping the record locked. This
|
|
allows some other thread such as a periodic scan thread a chance to interrupt
|
|
the get operation and process the record in between. CA monitors have always
|
|
been atomic as long as the value data isn't a string or an array, but this race
|
|
condition in the CA get path has now been fixed so the record will stay locked
|
|
between the two fetch operations.</p>
|
|
|
|
<p>This fixes <a href="https://bugs.launchpad.net/epics-base/+bug/1581212">
|
|
Launchpad bug #1581212</a>, thanks to Till Strauman and Dehong Zhang.</p>
|
|
|
|
<h3>New CONFIG_SITE variable for running self-tests</h3>
|
|
|
|
<p>The 'make runtests' and 'make tapfiles' build targets normally only run the
|
|
self-tests for the main <tt>EPICS_HOST_ARCH</tt> architecture. If the host is
|
|
able to execute self-test programs for other target architectures that are being
|
|
built by the host, such as when building a <tt>-debug</tt> version of the host
|
|
architecture for example, the names of those other architectures can be added to
|
|
the new <tt>CROSS_COMPILER_RUNTEST_ARCHS</tt> variable in either the
|
|
<tt>configure/CONFIG_SITE</tt> file or in an appropriate
|
|
<tt>configure/os/CONFIG_SITE.<host>.Common</tt> file to have the test
|
|
programs for those targets be run as well.</p>
|
|
|
|
<h3>Additional RELEASE file checks</h3>
|
|
|
|
<p>An additional check has been added at build-time for the contents of the
|
|
configure/RELEASE file(s), which will mostly only affect users of the Debian
|
|
EPICS packages published by NSLS-2. Support modules may share an install path,
|
|
but all such modules must be listed adjacent to each other in any RELEASE files
|
|
that point to them. For example the following will fail the new checks:</p>
|
|
|
|
<blockquote><pre>
|
|
AUTOSAVE = /usr/lib/epics
|
|
ASYN = /home/mdavidsaver/asyn
|
|
EPICS_BASE = /usr/lib/epics
|
|
</pre></blockquote>
|
|
|
|
<p>giving the compile-time error</p>
|
|
|
|
<blockquote><pre>
|
|
This application's RELEASE file(s) define
|
|
EPICS_BASE = /usr/lib/epics
|
|
after but not adjacent to
|
|
AUTOSAVE = /usr/lib/epics
|
|
Module definitions that share paths must be grouped together.
|
|
Either remove a definition, or move it to a line immediately
|
|
above or below the other(s).
|
|
Any non-module definitions belong in configure/CONFIG_SITE.
|
|
</pre></blockquote>
|
|
|
|
|
|
<p>In many cases such as the one above the order of the <tt>AUTOSAVE</tt> and
|
|
<tt>ASYN</tt> lines can be swapped to let the checks pass, but if the
|
|
<tt>AUTOSAVE</tt> module depended on <tt>ASYN</tt> and hence had to appear
|
|
before it in the list this error indicates that <tt>AUTOSAVE</tt> should also be
|
|
built in its own private area; a shared copy would likely be incompatible with
|
|
the version of <tt>ASYN</tt> built in the home directory.</p>
|
|
|
|
<h3>String field buffer overflows</h3>
|
|
|
|
<p>Two buffer overflow bugs that can crash the IOC have been fixed, caused by
|
|
initializing a string field with a value larger than the field size
|
|
(<a href="https://bugs.launchpad.net/bugs/1563191">Launchpad bug
|
|
#1563191</a>).</p>
|
|
|
|
<h3>Fixed stack corruption bug in epicsThread C++ API</h3>
|
|
|
|
<p>The C++ interface to the epicsThread API could corrupt the stack on thread
|
|
exit in some rare circumstances, usually at program exit. This bug has been
|
|
fixed (<a href="https://bugs.launchpad.net/bugs/1558206">Launchpad bug
|
|
#1558206</a>).</p>
|
|
|
|
<h3>RTEMS NTP Support Issue</h3>
|
|
|
|
<p>On RTEMS the NTP Time Provider could in some circumstances get out of sync
|
|
with the server because the osdNTPGet() code wasn't clearing its input socket
|
|
before sending out a new request. This
|
|
(<a href="https://bugs.launchpad.net/bugs/1549908">Launchpad bug 1549908</a>)
|
|
has now been fixed.</p>
|
|
|
|
<h3>CALC engine bitwise operator fixes</h3>
|
|
|
|
<p>The bitwise operators in the CALC engine have been modified to work properly
|
|
with values that have bit 31 (0x80000000) set. This modification involved
|
|
back-porting some earlier changes from the 3.15 branch, and fixes
|
|
<a href="https://code.launchpad.net/bugs/1514520">Launchpad bug
|
|
#1514520</a>.</p>
|
|
|
|
<h3>Fix <tt>ipAddrToAsciiAsync()</tt>: Don't try to join the daemon thread</h3>
|
|
|
|
<p>On process exit, don't try to stop the worker thread that makes DNS lookups
|
|
asynchronous. Previously this would wait for any lookups still in progress,
|
|
delaying the exit unnecessarily. This was most obvious with catools (eg.
|
|
cainfo).
|
|
<a href="https://bugs.launchpad.net/bugs/1527636">lp:1527636</a></p>
|
|
|
|
<h3>Fix <tt>epicsTime_localtime()</tt> on Windows</h3>
|
|
|
|
<p>Simpler versions of the epicsTime_gmtime() and epicsTime_localtime()
|
|
routines have been included in the Windows implementations, and a new test
|
|
program added. The original versions do not report DST status properly. Fixes
|
|
<a href="https://bugs.launchpad.net/bugs/1528284">Launchpad bug 1528284</a>.</p>
|
|
|
|
|
|
</body>
|
|
</html>
|