Merged reformatted Release Notes from 3.15, to revno 12735

This commit is contained in:
Andrew Johnson
2016-03-03 17:32:51 -06:00

View File

@@ -3,15 +3,13 @@
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<title>EPICS Base R3.16.0 Release Notes</title>
<title>EPICS Base R3.16.0.1 Release Notes</title>
</head>
<body lang="en">
<h1 align="center">EPICS Base Release 3.16.0</h1>
<h1 align="center">EPICS Base Release 3.16.0.1</h1>
<p style="color:red">This version of EPICS Base has not been released yet.</p>
<h2 align="center">Changes between 3.15.x and 3.16.0</h2>
<h2 align="center">Changes made on the 3.16 branch since 3.15.3</h2>
<!-- Insert new items immediately below this template ...
<h3>Title...</h3>
@@ -57,20 +55,23 @@ likewise.</p>
<h3>Database Multi-locking</h3>
<p>dbLock.c is re-written with an expanded API, and the removal of global mutex locks.</p>
<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 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>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>
<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>
@@ -84,15 +85,17 @@ 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>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>
with earlier versions of Base can define the necessary status symbols like
this:</p>
<blockquote><pre>
#include "epicsTime.h"
@@ -121,5 +124,98 @@ the stdout stream, making it hard to parse.</p>
callback.h header and removed the need for dbScan.c to reach into the internals
of its CALLBACK objects.</p>
<h2 align="center">Changes pulled from the 3.15 branch since 3.15.3</h2>
<!-- Insert inherited items immediately below here ... -->
<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 pulled from the 3.14 branch since 3.15.3</h2>
<!-- Insert inherited items immediately below here ... -->
<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>