Files
pcas/documentation/RELEASE_NOTES.html
2016-03-02 14:20:53 -06:00

126 lines
5.4 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.0 Release Notes</title>
</head>
<body lang="en">
<h1 align="center">EPICS Base Release 3.16.0</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>
<!-- Insert new items immediately below this template ...
<h3>Title...</h3>
<p>Description</p>
-->
<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>dbLock.c is re-written with an expanded API, and the removal of global mutex locks.</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>
</body>
</html>