114 lines
4.9 KiB
HTML
114 lines
4.9 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>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 should never be included by any header file
|
|
installed by Base, so its use will remain purely an internal implementation
|
|
detail and not be directly visible to application software.
|
|
Support modules which choose to use valgrind.h are advised to avoid 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 all
|
|
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>
|