Merged reformatted Release Notes from 3.15, to revno 12735
This commit is contained in:
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user