Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

9448 lines (9168 sloc) 342.459 kB
<?xml version="1.0" encoding="latin1" ?>
<!DOCTYPE chapter SYSTEM "chapter.dtd">
<chapter>
<header>
<copyright>
<year>2004</year><year>2012</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
The contents of this file are subject to the Erlang Public License,
Version 1.1, (the "License"); you may not use this file except in
compliance with the License. You should have received a copy of the
Erlang Public License along with this software. If not, it can be
retrieved online at http://www.erlang.org/.
Software distributed under the License is distributed on an "AS IS"
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
the License for the specific language governing rights and limitations
under the License.
</legalnotice>
<title>ERTS Release Notes</title>
<prepared>otp_appnotes</prepared>
<docno>nil</docno>
<date>nil</date>
<rev>nil</rev>
<file>notes.xml</file>
</header>
<p>This document describes the changes made to the ERTS application.</p>
<section><title>Erts 5.9.3</title>
<section><title>Fixed Bugs and Malfunctions</title>
<list>
<item>
<p>
Fix linking in OpenBSD. (Thanks to Matthew Dempsky)</p>
<p>
Own Id: OTP-10395</p>
</item>
<item>
<p>
Fix bug causing fallback atomics to be used even though
healthy gcc atomics or libatomic_ops was detected.</p>
<p>
Own Id: OTP-10418</p>
</item>
<item>
<p>
Ensure 'erl_crash.dump' when asked for it. This will
change erl_crash.dump behaviour.</p>
<p>
* Not setting ERL_CRASH_DUMP_SECONDS will now terminate
beam immediately on a crash without writing a crash dump
file.</p>
<p>
* Setting ERL_CRASH_DUMP_SECONDS to 0 will also terminate
beam immediately on a crash without writing a crash dump
file, i.e. same as not setting ERL_CRASH_DUMP_SECONDS
environment variable.</p>
<p>
* Setting ERL_CRASH_DUMP_SECONDS to a negative value will
let the beam wait indefinitely on the crash dump file
being written.</p>
<p>
* Setting ERL_CRASH_DUMP_SECONDS to a positive value will
let the beam wait that many seconds on the crash dump
file being written.</p>
<p>
A positive value will set an alarm/timeout for restart
both in beam and in heart if heart is running.</p>
<p>
*** POTENTIAL INCOMPATIBILITY ***</p>
<p>
Own Id: OTP-10422 Aux Id: kunagi-250 [161] </p>
</item>
<item>
<p>
Fix bug where MSVRT100.dll was not included in the
windows installer.</p>
<p>
Own Id: OTP-10481</p>
</item>
<item>
<p>In the expression
<c>&lt;&lt;Bin/binary,...&gt;&gt;</c>, if <c>Bin</c> was
a bitstring with a size not a multiple of 8, either no
exception was generated or an incorrect exception was
generated. (Thanks to Adam Rutkowski for reporting this
bug.)</p>
<p>
Own Id: OTP-10524</p>
</item>
<item>
<p>
The runtime system could crash while scheduling a port
task. The port task was scheduled either due to an
external I/O event being triggered, a driver timeout
being triggered, or data being sent over a distribution
channel.</p>
<p>
Own Id: OTP-10556</p>
</item>
<item>
<p>
<c>erlang:memory(ets)</c> erroneously included the size
of each ETS-table main structure twice.</p>
<p>
Own Id: OTP-10558</p>
</item>
<item>
<p>
Fix compile error in generated file hipe_amd64_bifs.S for
Solaris.</p>
<p>
Own Id: OTP-10577</p>
</item>
<item>
<p>
A faulty spec for process_info/2 could cause false
dialyzer warnings. The spec is corrected.</p>
<p>
Own Id: OTP-10584</p>
</item>
<item>
<p>
In very rare cases, the VM could crash if a garbage
collector was called while executing an appending bit
syntax instruction. The symptom was a core when
reallocating memory in the function erts_bs_append. The
garbage collector bug is now corrected.</p>
<p>
Own Id: OTP-10590</p>
</item>
</list>
</section>
<section><title>Improvements and New Features</title>
<list>
<item>
<p>
Improve support for building and testing in embedded ppc
environments.</p>
<p>
Own Id: OTP-10265 Aux Id: kunagi-159
[daf97f67-5724-4812-a5b6-7e86990133d2-1] </p>
</item>
<item>
<p>
Due to a race condition on Windows, sometimes when
printing to standard output and then immediately
terminating erlang all data would not be printed. The
emulator now waits for all data to be printed before
exiting.</p>
<p>
Own Id: OTP-10325 Aux Id: kunagi-166
[dd72d0e2-3e76-4a51-8b56-7564e24eecae] </p>
</item>
<item>
<p>
The frequency with which sleeping schedulers are woken
due to outstanding memory deallocation jobs has been
reduced.</p>
<p>
Own Id: OTP-10476 Aux Id: OTP-10162 </p>
</item>
<item>
<p>
Clearer warnings about the dangers of misuse of <seealso
marker="erl_nif#WARNING">native functions</seealso> and
<seealso marker="erl_driver#WARNING">drivers</seealso>
have been added to the documentation.</p>
<p>
Own Id: OTP-10557</p>
</item>
</list>
</section>
</section>
<section><title>Erts 5.9.2</title>
<section><title>Fixed Bugs and Malfunctions</title>
<list>
<item>
<p>
Fix erl_prim_loader errors in handling of primary
archive. The following errors have been corrected:</p>
<p>
<list> <item> If primary archive was named "xxx", then a
file in the same directory named "xxxyyy" would be
interpreted as a file named "yyy" inside the archive.
</item> <item> erl_prim_loader did not correctly create
and normalize absolute paths for primary archive and
files inside it, so unless given with exact same path
files inside the archive would not be found. E.g. if
escript was started as /full/path/to/xxx then
"./xxx/file" would not be found since erl_prim_loader
would try to match /full/path/to/xxx with
/full/path/to/./xxx. Same problem with ../. </item>
<item> Depending on how the primary archive was built,
erl_prim_loader:list_dir/1 would sometimes return an
empty string inside the file list. This was a virtual
element representing the top directory of the archive.
This has been removed. </item> </list></p>
<p>
Thanks to Tuncer Ayaz and Shunichi Shinohara for
reporting and co-authoring corrections.</p>
<p>
Own Id: OTP-10071</p>
</item>
<item>
<p>Fix: Add port-I/O statistics for active once and true
and not only active false.</p>
<p>
Own Id: OTP-10073</p>
</item>
<item>
<p>
The 64-bit windows installer did not look in the right
directories for 64-bit version of Microsoft Visual C++
2010 Redistibutable Package and hence took the wrong
decision about having to install the redistributable
package if the 32-bit version was installed but not the
64-bit and vice versa. This bug has now been fixed
Furthermore the sub-installer for the redistributable
package is now run in silent mode if the erlang installer
is.</p>
<p>
Own Id: OTP-10096</p>
</item>
<item>
<p>
epmd would fail to start automatically when starting a
distributed erlang node installed in a location with a
whitespace in the path.</p>
<p>
Own Id: OTP-10106</p>
</item>
<item>
<p>
A more or less harmless bug that sometimes caused memory
deallocations to be delayed longer than intended has been
fixed.</p>
<p>
Own Id: OTP-10116</p>
</item>
<item>
<p>
Fix bug causing emulator crash when running HiPE on ARM.
Bug has existed since R15B.</p>
<p>
Own Id: OTP-10137</p>
</item>
<item>
<p> A bug regarding spaces in C function prototypes has
been fixed. (Thanks to Richard O'Keefe.) </p>
<p>
Own Id: OTP-10138</p>
</item>
<item>
<p>
Corrected dtrace pid length in message related probes.
(Thanks to Zheng Siyao)</p>
<p>
Own Id: OTP-10142</p>
</item>
<item>
<p>
Correct formating in exit error messages</p>
<p>
Ensure displayed sizes are not negative. (Thanks to
Michael Santos)</p>
<p>
Own Id: OTP-10148</p>
</item>
<item>
<p>
fix escript/primary archive reloading</p>
<p>
If the mtime of an escript/primary archive file changes
after being added to the code path, correctly reload the
archive and update the cache. (Thanks to Tuncer Ayaz)</p>
<p>
Own Id: OTP-10151</p>
</item>
<item>
<p>
Doc fix: link from erlang:now/0 to os:timestamp/0</p>
<p>
Sometimes os:timestamp/0 is more appropriate than
erlang:now/0. The documentation for the former has a link
to the latter; this patch adds a link in the other
direction to make os:timestamp/0 more visible. Thanks to
Magnus Henoch</p>
<p>
Own Id: OTP-10180</p>
</item>
<item>
<p>
The caret in the werl window (on Windows) could appear at
the wrong place after regaining focus. This is now
corrected.</p>
<p>
Own Id: OTP-10181</p>
</item>
<item>
<p>
Fix bug that in some cases could cause corrupted binaries
in ETS tables with <c>compressed</c> option.</p>
<p>
Own Id: OTP-10182</p>
</item>
<item>
<p>
Fix use of "clever" mktime</p>
<p>
Commit 1eef765 introduced regression (conditional
_always_ evaluates to true) in which
erlang:localtime_to_universaltime/2 stopped working on
systems configured with timezone without DST (i.e. UTC)
on *BSD platforms: 1>
erlang:localtime_to_universaltime({{2012,1,1},{0,0,0}},
true). ** exception error: bad argument Thanks to Piotr
Sikora</p>
<p>
Own Id: OTP-10187</p>
</item>
<item>
<p>
Relocate bodies of DTrace probes to the statically-linked
VM.</p>
<p>
Due to various operating systems (in both the DTrace and
SystemTap worlds) not fully supporting DTrace probes (or
SystemTap-compatibility mode probes) in shared libraries,
we relocate those probes to the statically-linked virtual
machine. This could be seen as pollution of the pristine
VM by a (yet) experimental feature. However:</p>
<p>
1. This code can be eliminated completely by the C
preprocessor. 2. Leaving the probes in the dyntrace NIF
shared library simply does not work correctly on too many
platforms. *Many* thanks to Macneil Shonle at Basho for
assisting when my RSI-injured fingers gave out. (note:
Solaris 10 and FreeBSD 9.0-RELEASE can take a long time
to compile)</p>
<p>
Own Id: OTP-10189</p>
</item>
<item>
<p>
Fix bug in <c>ets:test_ms/2</c> that could cause emulator
crash when using <c>'$_'</c> in match spec.</p>
<p>
Own Id: OTP-10190</p>
</item>
<item>
<p>
Supplying a filename longer than the operating system
MAX_PATH to file:read_link/1 would cause a crash
(Segemntation fault/Critical Error) on all platforms.
This is now corrected.</p>
<p>
Own Id: OTP-10200</p>
</item>
<item>
<p>
If Perl was configured to interpret files as being
encoded in UTF-8, the build would crash in
<c>make_preload</c>. (Thanks to Aaron Harnly for noticing
this issue.)</p>
<p>
Own Id: OTP-10201</p>
</item>
<item>
<p>
Fix the erlc -MP flag</p>
<p>
Because of a copy-and-paste error in erlc.c, the -MP flag
had the same effect as -MG. As a workaround, you had to
pass +makedep_phony to enable the MP option. This patch
makes -MP work as intended.</p>
<p>
Own Id: OTP-10211</p>
</item>
<item>
<p>
Allow mixed IPv4 and IPv6 addresses to sctp_bindx</p>
<p>
Also allow mixed address families to bind, since the
first address on a multihomed sctp socket must be bound
with bind, while the rest are to be bound using
sctp_bindx. At least Linux supports adding address of
mixing families. Make inet_set_faddress function
available also when HAVE_SCTP is not defined, since we
use it to find an address for bind to be able to mix ipv4
and ipv6 addresses. Thanks to Tomas Abrahamsson</p>
<p>
Own Id: OTP-10217</p>
</item>
<item>
<p>
Fix support for leap seconds-aware timezones</p>
<p>
erlang:universaltime_to_localtime is leap seconds-aware
(since 2008), however erlang:localtime_to_universaltime
is not, which gives surprising results on systems
configured with leap seconds-aware timezones: 1>
erlang:universaltime_to_localtime({{2012,1,1},{0,0,0}}).
{{2012,1,1},{0,0,0}} 2>
erlang:localtime_to_universaltime({{2012,1,1},{0,0,0}}).
{{2012,1,1},{0,0,24}} and completely breaks
calendar:local_time_to_universal_time_dst: 3>
calendar:local_time_to_universal_time_dst({{2011,1,1},{0,0,0}}).
[] Thanks to Piotr Sikora</p>
<p>
Own Id: OTP-10227</p>
</item>
<item>
<p>
erlsrv: gracefully stop emulator on Windows shutdown</p>
<p>
Windows will send the SERVICE_CONTROL_SHUTDOWN event to
the service control handler when shutting down the
system. Instead of ignoring the event, erlsrv will now
invoke the stop action. Likewise, the Erlang emulator
(and it's po drivers) must not quit upon reception of the
CTRL_SHUTDOWN_EVENT event in th console control handler.
Thanks to Jan Kloetzke</p>
<p>
Own Id: OTP-10228</p>
</item>
<item>
<p>
Fix dtrace bug in file rename operation.</p>
<p>
Own Id: OTP-10234</p>
</item>
<item>
<p>
Fix bug in memory management of driver port data locks
(PDL). In some cases PDLs could be deallocated before
<c>ready_async</c> or <c>async_free</c> callback was
called.</p>
<p>
Own Id: OTP-10249</p>
</item>
</list>
</section>
<section><title>Improvements and New Features</title>
<list>
<item>
<p>Add port and suspend options to lock-counter
profiling. (Thanks to Rick Reed)</p>
<p>
Own Id: OTP-10051</p>
</item>
<item>
<p>
Latency when using the active_once option in gen_tcp
communication is reduced.</p>
<p>
Own Id: OTP-10055 Aux Id: sto139 </p>
</item>
<item>
<p>Remove bit8 option support from inet</p>
<p>
Own Id: OTP-10056</p>
</item>
<item>
<p>
The OS Pid of a port program is now available by calling
erlang:port_info(Port,os_pid), Thanks to Matthias Lang
for the original patch.</p>
<p>
Own Id: OTP-10057</p>
</item>
<item>
<p>
Fix openpty usage in run_erl. </p>
<p>
Reopening a slave file descriptor which was closed
earlier could lead to a misbehaving connection. This has
now been remedied.</p>
<p>
Own Id: OTP-10076</p>
</item>
<item>
<p>
Remove all code, documentation, options and diagnostic
functions which were related to the experimental hybrid
heap implementation.</p>
<p>
Own Id: OTP-10105</p>
</item>
<item>
<p>
Optimizations of memory deallocations.</p>
<p>
Own Id: OTP-10162 Aux Id: OTP-7775 </p>
</item>
<item>
<p>
Optimization of process locking.</p>
<p>
Own Id: OTP-10163</p>
</item>
<item>
<p>
Added a xcomp example file for powerpc-dso-linux-gnu</p>
<p>
Own Id: OTP-10198</p>
</item>
<item>
<p>
Detect when middle endian doubles are used by a platform
and account for it when decoding floats. (Thanks to Mike
Sperber)</p>
<p>
Own Id: OTP-10209</p>
</item>
</list>
</section>
</section>
<section><title>Erts 5.9.1.2</title>
<section><title>Fixed Bugs and Malfunctions</title>
<list>
<item>
<p>
On Linux systems using heart (erl -heart) and a
HEAR_BEAT_TIMEOUT less than default, heart could fire
even though Erlang was running fine after approx 298 to
497 days (depending on kernel config). This was due to
the behaviour of the times(2) system call. Usage of
times(2) is now replaced with clock_gettime(2) and the
CLOCK_MONOTONIC clock, resulting in a more stable
solution. The Erlang VM itself has used clock_gettime(2)
on linux since before R12B, so this only affects the
heart program.</p>
<p>
Own Id: OTP-10111 Aux Id: seq12075 </p>
</item>
</list>
</section>
</section>
<section><title>Erts 5.9.1.1</title>
<section><title>Fixed Bugs and Malfunctions</title>
<list>
<item>
<p>
If threads support for the runtime system had been
disabled at compile time (<c>--disable-threads</c> had
been passed to <c>configure</c>), and the <c>+A</c>
command line argument of <c>erl</c> was passed when
starting the runtime system, <seealso
marker="erl_driver#driver_system_info">driver_system_info()</seealso>
erroneously claimed that the runtime system had async
threads even though it had not.</p>
<p>
Due to this bug the file driver did not split tasks into
smaller chunks, but instead completed the whole task at
once, i.e., the scheduler got occupied with I/O for a
longer time than intended.</p>
<p>
Own Id: OTP-10059</p>
</item>
</list>
</section>
<section><title>Improvements and New Features</title>
<list>
<item>
<p>
A proposal for a new scheduler wakeup strategy has been
implemented. For more information see the documentation
of the <seealso marker="erl#+sws">+sws</seealso> command
line argument of <c>erl</c>.</p>
<p>
Own Id: OTP-10033 Aux Id: Seq12025 </p>
</item>
<item>
<p>
A switch for configuration of busy wait length for
scheduler threads has been added. For more information
see the documentation of the <seealso
marker="erl#+sbwt">+sbwt</seealso> command line argument
of <c>erl</c>.</p>
<p>
Own Id: OTP-10044 Aux Id: Seq11976 </p>
</item>
<item>
<p>
The extra memory barriers introduced by bug-fix OTP-9281
were unnecessarily used also on tables without the
<c>write_concurrency</c> option enabled. This could
unnecessarily degrade performance of ETS tables without
<c>write_concurrency</c> on some hardware (e.g. PowerPC)
while not effecting performance at all on other hardware
(e.g. x86/x86_64).</p>
<p>
OTP-9281 (R14B03): ETS tables using the
<c>write_concurrency</c> option could potentially get
into an internally inconsistent state.</p>
<p>
Own Id: OTP-10048 Aux Id: OTP-9281 </p>
</item>
</list>
</section>
</section>
<section><title>Erts 5.9.1</title>
<section><title>Fixed Bugs and Malfunctions</title>
<list>
<item>
<p><c>erlang:system_profile</c> errorneous profiled the
profiler process when observing runnable processes. This
has been corrected. </p>
<p>
Own Id: OTP-9849</p>
</item>
<item>
<p>Calling trace_info/2 asking for information about a
function that had native could could crash the run-time
system.</p>
<p>
Own Id: OTP-9886</p>
</item>
<item>
<p>
reduce smp locking time range in erts_garbage_collect
(thanks to Jovi Zhang)</p>
<p>
Own Id: OTP-9912</p>
</item>
<item>
<p>
Fix typo in supervisor behaviour doc (Thanks to Ricardo
Catalinas Jiménez)</p>
<p>
Own Id: OTP-9924</p>
</item>
<item>
<p>
Correct spelling of registered (Thanks to Richard
Carlsson)</p>
<p>
Own Id: OTP-9925</p>
</item>
<item>
<p>
erts: Remove unused variable (Thanks to Jovi Zhang)</p>
<p>
Own Id: OTP-9926</p>
</item>
<item>
<p>
Fix bug in ETS with <c>compressed</c> option and
insertion of term containing large integers (>2G) on
64-bit machines. Seen to cause emulator crash. (Thanks to
Diego Llarrull for excellent bug report)</p>
<p>
Own Id: OTP-9932</p>
</item>
<item>
<p>
Handle Linux OS where /sys/devices/system/node is only
readable by root. Fallback to /sys/devices/system/cpu for
topology info.</p>
<p>
Own Id: OTP-9978</p>
</item>
<item>
<p> When an escript ends now all printout to standard
output and standard error gets out on the terminal. This
bug has been corrected by changing the behaviour of
erlang:halt/0,1, which should fix the same problem for
other escript-like applications, i.e that data stored in
the output port driver buffers got lost when printing on
a TTY and exiting through erlang:halt/0,1. </p>
<p> The BIF:s erlang:halt/0,1 has gotten improved
semantics and there is a new BIF erlang:halt/2 to
accomplish something like the old semantics. See the
documentation. </p>
<p> Now erlang:halt/0 and erlang:halt/1 with an integer
argument will close all ports and allow all pending async
threads operations to finish before exiting the emulator.
Previously erlang:halt/0 and erlang:halt(0) would just
wait for pending async threads operations but not close
ports. And erlang:halt/1 with a non-zero integer argument
would not even wait for pending async threads operations.
</p>
<p> To roughly the old behaviour, to not wait for ports
and async threads operations when you exit the emulator,
you use erlang:halt/2 with an integer first argument and
an option list containing {flush,false} as the second
argument. Note that now is flushing not dependant of the
exit code, and you can not only flush async threads
operations which we deemed as a strange behaviour anyway.
</p>
<p>Also, erlang:halt/1,2 has gotten a new feature: If the
first argument is the atom 'abort' the emulator is
aborted producing a core dump, if the operating system so
allows. </p>
<p>
Own Id: OTP-9985</p>
</item>
<item>
<p>
Added check to inet driver to avoid building on operating
systems that do not yet have IPv6 compatible socket API.
(Thanks to Peer Stritzinger)</p>
<p>
Own Id: OTP-9996</p>
</item>
<item>
<p>
Fix bug when the number of CPUs actually found is lower
than the configured value. (Thanks to Benjamin
Herrenschmidt)</p>
<p>
Own Id: OTP-10004</p>
</item>
<item>
<p>
The runtime system without SMP support and without thread
support erroneously busy waited when no work was present.
This bug first appeared in <c>erts-5.9</c>.</p>
<p>
Own Id: OTP-10019</p>
</item>
<item>
<p>
Various typographical errors corrected in documentation
for common_test, driver, erl_driver and windows
installation instructions. (Thanks to Tuncer Ayaz)</p>
<p>
Own Id: OTP-10037</p>
</item>
<item>
<p>
Fix memory leak caused by race on exiting process</p>
<p>
Own Id: OTP-10041</p>
</item>
</list>
</section>
<section><title>Improvements and New Features</title>
<list>
<item>
<p>Add <c>erlang:statistics(scheduler_wall_time)</c> to
ensure correct determination of scheduler utilization.
Measuring scheduler utilization is strongly preferred
over CPU utilization, since CPU utilization gives very
poor indications of actual scheduler/vm usage.</p>
<p>
Own Id: OTP-9858</p>
</item>
<item>
<p>
ERTS internal API improvements. In some cases the amount
of atomic read operations needed have been reduced due to
this.</p>
<p>
Own Id: OTP-9922</p>
</item>
<item>
<p>
The DTrace source patch from Scott Lystig Fritchie is
integrated in the source tree. Using an emulator with
dtrace probe is still not supported for production use,
but may be a valuable debugging tool. Configure with
--with-dynamic-trace=dtrace (or
--with-dynamic-trace=systemtap) to create a build with
dtrace probes enabled. See runtime_tools for
documentation and examples.</p>
<p>
Own Id: OTP-10017</p>
</item>
</list>
</section>
<section><title>Known Bugs and Problems</title>
<list>
<item>
<p>
enif_make_copy may invalidate enif_inspect_binary.</p>
<p>
Own Id: OTP-9828</p>
</item>
</list>
</section>
</section>
<section><title>Erts 5.9.0.1</title>
<section><title>Fixed Bugs and Malfunctions</title>
<list>
<item>
<p>
A feature test for the <c>lwsync</c> instruction
performed on PowerPC hardware at runtime system startup
got into an eternal loop if the instruction was not
supported. This bug was introduced in erts-5.9/OTP-R15B.</p>
<p>
Own Id: OTP-9843</p>
</item>
<item>
<p>
I/O events could potentially be delayed for ever when
enabling kernel-poll on a non-SMP runtime system
executing on Solaris. When also combined with
async-threads the runtime system hung before completing
the boot phase. This bug was introduced in
erts-5.9/OTP-R15B.</p>
<p>
Own Id: OTP-9844</p>
</item>
</list>
</section>
</section>
<section><title>Erts 5.9</title>
<section><title>Fixed Bugs and Malfunctions</title>
<list>
<item>
<p>
Honor option <c>packet_size</c> for http packet parsing
by both TCP socket and <c>erlang:decode_packet</c>. This
gives the ability to accept HTTP headers larger than the
default setting, but also avoid DoS attacks by accepting
lines only up to whatever length you wish to allow. For
consistency, packet type <c>line</c> also honor option
<c>packet_size</c>. (Thanks to Steve Vinoski)</p>
<p>
Own Id: OTP-9389</p>
</item>
<item>
<p> A few contracts in the <c>lists</c> module have been
corrected. </p>
<p>
Own Id: OTP-9616</p>
</item>
<item>
<p>
The Unicode noncharacter code points 16#FFFE and 16#FFFE
were not allowed to be encoded or decoded using the
<c>unicode</c> module or bit syntax. That was
inconsistent with the other noncharacters 16#FDD0 to
16#FDEF that could be encoded/decoded. To resolve the
inconsistency, 16#FFFE and 16#FFFE can now be encoded and
decoded. (Thanks to Alisdair Sullivan.)</p>
<p>
*** POTENTIAL INCOMPATIBILITY ***</p>
<p>
Own Id: OTP-9624</p>
</item>
<item>
<p>
Make epp search directory of current file first when
including another file This completes a partial fix in
R11 that only worked for include_lib(). (Thanks to
Richard Carlsson)</p>
<p>
Own Id: OTP-9645</p>
</item>
<item>
<p>
Fixed memory leak in
<c>enif_inspect_io_list_as_binary</c> when applied on a
process independent environment.</p>
<p>
Own Id: OTP-9668</p>
</item>
<item>
<p>The number of beam catches allowed in code are no
longer statically defined and will grow according to its
need.</p>
<p>
Own Id: OTP-9692</p>
</item>
<item>
<p>
Add missing parenthesis in heart doc.</p>
<p>
Add missing spaces in the Reference Manual distributed
section.</p>
<p>
In the HTML version of the doc those spaces are necessary
to separate those words.</p>
<p>
Own Id: OTP-9693</p>
</item>
<item>
<p>
Fixes module erlang doc style: option description (Thanks
to Ricardo Catalinas Jiménez)</p>
<p>
Own Id: OTP-9697</p>
</item>
<item>
<p>
Specifying a scope to binary:match/3 when using multiple
searchstrings resulted in faulty return values. This is
now corrected.</p>
<p>
Own Id: OTP-9701</p>
</item>
<item>
<p>
The runtime system crashed if more than one thread tried
to exit the runtime system at the same time.</p>
<p>
Own Id: OTP-9705</p>
</item>
<item>
<p>
Fix documentation for erlang:process_flag/2</p>
<p>
For the subsection about process_flag(save_calls, N)
there's an unrelated paragraph about process priorities
which was copied from the preceeding subsection regarding
process_flag(priority, Level). (Thanks to Filipe David
Manana)</p>
<p>
Own Id: OTP-9714</p>
</item>
<item>
<p>
Calls to <c>erlang:system_flag(schedulers_online, N)</c>
and/or <c>erlang:system_flag(multi_scheduling,
block|unblock)</c> could cause internal data used by this
functionality to get into an inconsistent state. When
this happened various problems occurred. This bug was
quite hard to trigger, so hopefully no-one has been
effected by it.</p>
<p>
A spinlock used by the run-queue management sometimes got
heavily contended. This code has now been rewritten, and
the spinlock has been removed.</p>
<p>
Own Id: OTP-9727</p>
</item>
<item>
<p>
Use libdlpi to get physical address (Thanks to Trond
Norbye)</p>
<p>
Own Id: OTP-9818</p>
</item>
</list>
</section>
<section><title>Improvements and New Features</title>
<list>
<item>
<p> An option list argument can now be passed to
<c>file:read_file_info/2, file:read_link_info/2</c> and
<c>file:write_file_info/3</c> and set time type
information in the call. Valid options are <c>{time,
local}, {time, universal}</c> and <c>{time, posix}</c>.
In the case of <c>posix</c> time no conversions are made
which makes the operation a bit faster. </p>
<p>
Own Id: OTP-7687</p>
</item>
<item>
<p>A number of memory allocation optimizations have been
implemented. Most optimizations reduce contention caused
by synchronization between threads during allocation and
deallocation of memory. Most notably:</p> <list> <item>
Synchronization of memory management in scheduler
specific allocator instances has been rewritten to use
lock-free synchronization. </item> <item> Synchronization
of memory management in scheduler specific pre-allocators
has been rewritten to use lock-free synchronization.
</item> <item> The 'mseg_alloc' memory segment allocator
now use scheduler specific instances instead of one
instance. Apart from reducing contention this also
ensures that memory allocators always create memory
segments on the local NUMA node on a NUMA system. </item>
</list>
<p>
Own Id: OTP-7775</p>
</item>
<item>
<p>
The ethread atomic memory operations API used by the
runtime system has been extended and improved.</p>
<p>
The ethread library now also performs runtime tests for
presence of hardware features, such as for example SSE2
instructions, instead of requiring this to be determined
at compile time.</p>
<p>
All uses of the old deprecated atomic API in the runtime
system have been replaced with the use of the new atomic
API. In a lot of places this change imply a relaxation of
memory barriers used.</p>
<p>
Own Id: OTP-9014</p>
</item>
<item>
<p>gen_sctp:open/0-2 may now return
{error,eprotonosupport} if SCTP is not supported</p>
<p>gen_sctp:peeloff/1 has been implemented and creates a
one-to-one socket which also are supported now</p>
<p>
*** POTENTIAL INCOMPATIBILITY ***</p>
<p>
Own Id: OTP-9239</p>
</item>
<item>
<p>
Sendfile has been added to the file module's API.
sendfile/2 is used to read data from a file and send it
to a tcp socket using a zero copying mechanism if
available on that OS.</p>
<p>
Thanks to Tuncer Ayaz and Steve Vinovski for original
implementation</p>
<p>
Own Id: OTP-9240</p>
</item>
<item>
<p>
enif_get_reverse_list function added to nif API. This
function should be used to reverse small lists which are
deep within other structures making it impractical to do
the reverse in Erlang.</p>
<p>
Own Id: OTP-9392</p>
</item>
<item>
<p>
The deprecated concat_binary/1 BIF has been removed. Use
<c>list_to_binary</c> or <c>iolist_to_binary/1</c>
instead.</p>
<p>
*** POTENTIAL INCOMPATIBILITY ***</p>
<p>
Own Id: OTP-9421</p>
</item>
<item>
<p>Erlang/OTP can now be built using parallel make if you
limit the number of jobs, for instance using '<c>make
-j6</c>' or '<c>make -j10</c>'. '<c>make -j</c>' does not
work at the moment because of some missing
dependencies.</p>
<p>
Own Id: OTP-9451</p>
</item>
<item>
<p>Line number and filename information are now included
in exception backtraces as a fourth element in the MFA
tuple. The information will be pretty-printed by the
shell and used by <c>common_test</c> to provide better
indication of where a test case.</p>
<p>
*** POTENTIAL INCOMPATIBILITY ***</p>
<p>
Own Id: OTP-9468</p>
</item>
<item>
<p>All binary constants used to be handled as heap
binaries (i.e. the entire binary would be copied when
sent to another process). Binary constants larger than 64
bytes are now refc binaries (i.e. the actual data in the
binary will not be copied when sent to another
process).</p>
<p>
Own Id: OTP-9486</p>
</item>
<item>
<p>
If a float and an integer is compared, the integer is
only converted to a float if the float datatype can
contain it. Otherwise the float is converted to an
integer.</p>
<p>
*** POTENTIAL INCOMPATIBILITY ***</p>
<p>
Own Id: OTP-9497</p>
</item>
<item>
<p>
Add NIF function enif_is_number</p>
<p>
This function allows for easily determining if a term
represents or not a number (integer, float, small or
big).(Thanks to Filipe David Manana)</p>
<p>
Own Id: OTP-9629</p>
</item>
<item>
<p>
The ERTS internal system block functionality has been
replaced by new functionality for blocking the system.
The old system block functionality had contention issues
and complexity issues. The new functionality piggy-backs
on thread progress tracking functionality needed by newly
introduced lock-free synchronization in the runtime
system. When the functionality for blocking the system
isn't used, there is more or less no overhead at all.
This since the functionality for tracking thread progress
is there and needed anyway.</p>
<p>
Own Id: OTP-9631</p>
</item>
<item>
<p>
An ERTS internal, generic, many to one, lock-free queue
for communication between threads has been introduced.
The many to one scenario is very common in ERTS, so it
can be used in a lot of places in the future. Currently
it is used by scheduling of certain jobs, and the async
thread pool, but more uses are planned for the future.</p>
<p>
Drivers using the driver_async functionality are not
automatically locked to the system anymore, and can be
unloaded as any dynamically linked in driver.</p>
<p>
Scheduling of ready async jobs is now also interleaved in
between other jobs. Previously all ready async jobs were
performed at once.</p>
<p>
Own Id: OTP-9632</p>
</item>
<item>
<p>
Tuple funs (a two-element tuple with a module name and a
function) are now officially deprecated and will be
removed in R16. Use '<c>fun M:F/A</c>' instead. To make
you aware that your system uses tuple funs, the very
first time a tuple fun is applied, a warning will be sent
to the error logger.</p>
<p>
Own Id: OTP-9649</p>
</item>
<item>
<p>
Changed the internal BIF calling convention. Will make
simpler faster code and allow BIFs with an arbitrary
arity.</p>
<p>
Own Id: OTP-9662</p>
</item>
<item>
<p>
Windows native critical sections are now used internally
in the runtime system on Windows as mutex implementation.
This since they perform better under extreme contention
than our own implementation.</p>
<p>
Own Id: OTP-9671</p>
</item>
<item>
<p>
Convert some erl_nif macros into inline functions. Allow
for better compile time type checking. (Thanks to Tuncer
Ayaz)</p>
<p>
Own Id: OTP-9675</p>
</item>
<item>
<p>
The <c>+scl</c> command line flag has been added. It can
be used for disabling compaction of scheduler load. For
more information see the <c>erl(1)</c> documentation.</p>
<p>
Own Id: OTP-9695</p>
</item>
<item>
<p>The build system has been updated so that Erlang/OTP
can be built on Mac OS X Lion systems without a GCC
compiler. The INSTALL guide has been updated with
instructions on how to install a GCC compiler and build
Erlang/OTP with it, in order to get a run-time system
with better performance.</p>
<p>
Own Id: OTP-9712</p>
</item>
<item>
<p>
When loading a module, the system use to run on a single
scheduler during the entire loading process. This has
been changed to only take down the system just before
inserting the loaded code into the system tables,
resulting in a much shorter disruption if a module is
loaded in a busy system. (Suggested by Bob Ippolito.)</p>
<p>
Own Id: OTP-9720</p>
</item>
<item>
<p>
Possible to run HiPE without floating point exceptions
(FPE). Useful on platforms that lack reliable FPE. Slower
float operations compared to HiPE with FPE.</p>
<p>
Own Id: OTP-9724</p>
</item>
<item>
<p>
As of ERTS version 5.9 (OTP-R15B) the runtime system will
by default <em>not</em> bind schedulers to logical
processors.</p>
<p>
If the Erlang runtime system is the only operating system
process that binds threads to logical processors, this
improves the performance of the runtime system. However,
if other operating system processes (as for example
another Erlang runtime system) also bind threads to
logical processors, there might be a performance penalty
instead. In some cases this performance penalty might be
severe. Due to this, we change the default so that the
user must make an active decision in order to bind
schedulers.</p>
<p>
*** POTENTIAL INCOMPATIBILITY ***</p>
<p>
Own Id: OTP-9726</p>
</item>
<item>
<p>
The use of <c>erlang:system_flag(scheduler_bind_type,
_)</c> and <c>erlang:system_flag(cpu_topology, _)</c>
have been deprecated and scheduled for removal in
erts-5.10/OTP-R16. For more information see the
documentation of <c>erlang:system_flag/2</c>.</p>
<p>
*** POTENTIAL INCOMPATIBILITY ***</p>
<p>
Own Id: OTP-9749</p>
</item>
<item>
<p>
An ancient workaround for a Windows bug was removed from
the open_port code, open_port({spawn,...}...) is now
faster. Thanks to Daniel Goertzen.</p>
<p>
Own Id: OTP-9766</p>
</item>
<item>
<p>
The use of deprecated 32bit time_t on 32bit Windows is
removed.</p>
<p>
Own Id: OTP-9767</p>
</item>
<item>
<p>
The NIF <c>reload</c> mechanism is deprecated. Do not use
it as an upgrade method for live production systems. It
might be removed in future releases. It can still serve
as a development feature but a warning message will be
logged each time it is used.</p>
<p>
*** POTENTIAL INCOMPATIBILITY ***</p>
<p>
Own Id: OTP-9771</p>
</item>
<item>
<p>The driver interface has been changed to enable 64-bit
aware drivers. Most importantly the return types for
ErlDrvEntry callbacks 'call' and 'control' has ben
enlarged which require drivers to be changed or they will
cause emulator crashes. See <seealso
marker="erl_driver#rewrites_for_64_bits"> Rewrites for
64-bit driver interface </seealso> in the driver manual.
</p>
<p>Due to this driver <seealso
marker="erl_driver#version_management">version
management</seealso> is now mandatory. A driver that is
not written with version management or a driver that was
compiled with the wrong major version will be not be
loaded by the emulator.</p>
<p>
*** POTENTIAL INCOMPATIBILITY ***</p>
<p>
Own Id: OTP-9795</p>
</item>
<item>
<p>
Eliminate use of deprecated regexp module</p>
<p>
Own Id: OTP-9810</p>
</item>
</list>
</section>
</section>
<section><title>Erts 5.8.5</title>
<section><title>Fixed Bugs and Malfunctions</title>
<list>
<item>
<p>
Several bugs concerning constant binary constructions
such as &lt;&lt;0:4294967295&gt;&gt; have been corrected.
Depending on the actual size of the binary and the type
of run-time system (32-bit, halfword, 64-bit), such
expression could either crash the run-time system or make
the loader refuse loading of the module.</p>
<p>
Own Id: OTP-9284</p>
</item>
<item>
<p>
The Erlsrv utility failed to stop the erlang machine if
no StopAction was defined when the service was stopped.
This is now corrected.</p>
<p>
Own Id: OTP-9344</p>
</item>
<item>
<p>
Due to a bug in glibc the runtime system could abort
while trying to destroy a mutex. A fix for this was
introduced in R14B02. This fix did, however, not solve
the problem. The runtime system will now issue a warning
instead of aborting.</p>
<p>
Own Id: OTP-9373 Aux Id: OTP-9009 </p>
</item>
<item>
<p>
Replace atom in DRV macro in prim_file with string</p>
<p>
An experimental version of Dialyzer discovered that the
atom that replaced the DRV macro in prim_file ends up in
calls to erlang:open_port({spawn, Driver}, Portopts) as
the Driver argument. The documentation states that this
call requires a string there.</p>
<p>
This change is also consistent with the one introduced in
commit 0f03b1e9d2bef3bc830c31a369261af4c5234727 by Kostis
Sagonas.</p>
<p>
Own Id: OTP-9377</p>
</item>
<item>
<p>
Fix typos in the epmd documentation (Thanks to Holger
Weiß )</p>
<p>
Own Id: OTP-9387</p>
</item>
<item>
<p>
Fix faulty integer terms created by NIF API from 64-bit
integers on halfword emulator. (Thanks to Paolo Negri and
Paul Davis)</p>
<p>
Own Id: OTP-9394</p>
</item>
<item>
<p>
Fix <c>epmd</c> crash on vxworks caused by faulty
argument to select() system call.</p>
<p>
Own Id: OTP-9427 Aux Id: seq11855 </p>
</item>
<item>
<p>
The ets:test_ms function could in rare cases truncate the
error messages. This is now corrected.</p>
<p>
Own Id: OTP-9435</p>
</item>
<item>
<p>
Fix bug related to hibernate and HiPE (clear
F_HIBERNATE_SCHED flag)</p>
<p>
F_HIBERNATE_SCHED flag that was introduced in
b7ecdcd1ae9e11b8f75e must be cleared in hipe_mode_switch
as well. Otherwise, processes running HiPE code that
hibernate, wake up and then trap into a BIF will not be
rescheduled.(Thanks to Paul Guyot)</p>
<p>
Own Id: OTP-9452</p>
</item>
<item>
<p>
Fix bug in FreeBSD topology detection code (Thanks to
Paul Guyot)</p>
<p>
Own Id: OTP-9453</p>
</item>
<item>
<p>
Fix use of logical operator &amp;&amp; with constant
operand instead of bitwise &amp; (Thanks to Cristian
Greco)</p>
<p>
Own Id: OTP-9454</p>
</item>
<item>
<p>
inet: error if fd does not match socket domain</p>
<p>
If an IPv4 fd is opened as an IPv6 socket, unexpected
behaviour can occur. For example, if an IPv4 UDP socket
is opened and passed into Erlang as an IPv6 socket, the
first 3 bytes (corresponding to 1 byte representing the
protocol family, 2 bytes set to the port) are stripped
from the payload. The cause of the UDP payload truncation
happens in inet_drv.c:packet_inet_input when a call to
inet_get_address fails silently because the family is set
to PF_INET6 but the buffer len is the size of an IPv4
struct sockaddr_in.</p>
<p>
(Thanks to Andrew Tunnell-Jones for finding the bug and
the test case!)</p>
<p>
Own Id: OTP-9455</p>
</item>
<item>
<p>
erts: use a union to avoid strict aliasing issues</p>
<p>
Use a union for pointer type conversion to avoid compiler
warnings about strict-aliasing violations with gcc-4.1.
gcc >= 4.2 does not emit the warning. erts: adapt
matrix_nif to R14 erl_nif API changes (Thanks To Tuncer
Ayaz)</p>
<p>
Own Id: OTP-9487</p>
</item>
<item>
<p>
fix 64-bit issues in the garbage collection (Thanks to
Richard Carlsson)</p>
<p>
Own Id: OTP-9488</p>
</item>
<item>
<p>
epmd: fix compiler warnings</p>
<p>
Suppress compiler warnings about ignored return values.
(Thanks to Michael Santos )</p>
<p>
Own Id: OTP-9500</p>
</item>
<item>
<p>
Fix non-existing function (erlang:disconnect/1) in
distributed reference manual (Thanks to Fabian Król)</p>
<p>
Own Id: OTP-9504</p>
</item>
<item>
<p>
Document fdatasync -lrt requirement (SunOS &lt;= 5.10)
(Thanks to Tuncer Ayaz)</p>
<p>
Own Id: OTP-9512</p>
</item>
<item>
<p>
Let epmd ignore empty ERL_EPMD_ADDRESS</p>
<p>
If the environment variable ERL_EPMD_ADDRESS is set to
the empty string, empd now behaves like it does by
default when ERL_EPMD_ADDRESS is unset. That is, in this
case, epmd now listens on all available interfaces
instead of using only the loopback interface, which
happened because epmd added the loopback address to the
(in this case empty) list of addresses specified via
ERL_EPMD_ADDRESS.</p>
<p>
Also, epmd now ignores ERL_EPMD_ADDRESS if it contains
only separator characters (comma and space).</p>
<p>
The same applies to epmd's -address option.(Thanks to
Holger Weiß)</p>
<p>
Own Id: OTP-9525</p>
</item>
<item>
<p>
Remove dead code in erl_compile (Thanks to Tuncer Ayaz)</p>
<p>
Own Id: OTP-9527</p>
</item>
<item>
<p>
Add erlang:external_size/2 BIF</p>
<p>
This BIF's second parameter is a list of options.
Currently the only allowed option is {minor_version,
Version} where version is either 0 (default) or 1.
(Thanks to Filipe David Manana )</p>
<p>
Own Id: OTP-9528</p>
</item>
<item>
<p>
Fix enif_compare on 64bits machines</p>
<p>
In 64bits machines the Sint type has a size of 8 bytes,
while on 32bits machines it has a 4 bytes size.
enif_compare was ignoring this and therefore returning
incorrect values when the result of the CMP function
(which returns a Sint value) doesn't fit in 4 bytes.
(Thanks to Filipe David Manana)</p>
<p>
Own Id: OTP-9533</p>
</item>
<item>
<p>
Implement or fix -Werror option</p>
<p>
If -Werror is enabled and there are warnings no output
file is written. Also make sure that error/warning
reporting is consistent. (Thanks to Tuncer Ayaz)</p>
<p>
Own Id: OTP-9536</p>
</item>
<item>
<p>In some rare cases we did not have a run queue when
scheduling misc ops. This is now fixed.</p>
<p>
Own Id: OTP-9537</p>
</item>
<item>
<p>Remove misc. compiler warnings</p>
<p>
Own Id: OTP-9542</p>
</item>
<item>
<p>
Two bugs in gen_sctp has been corrected: getopts/setopts
hence also send could only be called from socket owner,
and options 'linger', 'rcvbuf' and 'sndbuf' was read from
wrong protocol layer hence read wrong values by getopts.</p>
<p>
Own Id: OTP-9544</p>
</item>
<item>
<p>
Erlang/OTP can now be built on MacOS X Lion.</p>
<p>
Own Id: OTP-9547</p>
</item>
<item>
<p> XML files have been corrected. </p>
<p>
Own Id: OTP-9550 Aux Id: OTP-9541 </p>
</item>
<item>
<p>
Fix potential errors inspired by running cppcheck(1)
(Thanks to Christian von Roques)</p>
<p>
Own Id: OTP-9557</p>
</item>
<item>
<p>When auxiliary work was enqueued on a scheduler, the
wakeup of the scheduler in order to handle this work
could be lost. Wakeups in order to handle ordinary work
were not effected by this bug. The bug only effected
runtime systems with SMP support as follows:</p> <list>
<item>Deallocation of some ETS data structures could be
delayed.</item> <item>On Linux systems not using the NPTL
thread library (typically ancient systems with kernel
versions prior to 2.6) and Windows systems, the <c>{Port,
{exit_status, Status}}</c> message from a terminating
port program could be delayed. That is, it only effected
port programs which had been started by passing
<c>exit_status</c> as an option to
<c>open_port/2</c>.</item> </list>
<p>
Own Id: OTP-9567</p>
</item>
<item>
<p>
Handle rare race in the crypto key server functionality</p>
<p>
Own Id: OTP-9586</p>
</item>
</list>
</section>
<section><title>Improvements and New Features</title>
<list>
<item>
<p> Types and specifications have been added. </p>
<p>
Own Id: OTP-9356</p>
</item>
<item>
<p>
New allocator strategy "address order first fit". May
ease the emptying of memory carriers and thereby real
release of memory back to the OS.</p>
<p>
Own Id: OTP-9424</p>
</item>
<item>
<p>
The new <c>erlang:check_old_code/1</c> BIF checks whether
a module has old code.</p>
<p>
Own Id: OTP-9495</p>
</item>
<item>
<p> Update documentation and specifications of some of
the zlib functions. </p>
<p>
Own Id: OTP-9506</p>
</item>
<item>
<p>
Detect the available CPUs on IRIX</p>
<p>
Add support for querying the number of configured and
online processors on SGI systems running IRIX.(Thanks to
Holger Weiß)</p>
<p>
Own Id: OTP-9531</p>
</item>
</list>
</section>
</section>
<section><title>Erts 5.8.4</title>
<section><title>Fixed Bugs and Malfunctions</title>
<list>
<item>
<p>Fix binary and iolist overflow problems. Typically
problems arose in length calculation where the result
would exceed (1 bsl 32 - 1).</p>
<p>
Own Id: OTP-9118</p>
</item>
<item>
<p>
Using the old erlang shell (i.e. erl instead on werl) on
windows and doing several init:restart's would eventually
hang the VM. That is no longer the case.</p>
<p>
Own Id: OTP-9139</p>
</item>
<item>
<p>
Removed recursive C code when printing Erlang terms to
buffers, avoiding stack overflows that could cause VM to
crash.</p>
<p>
Own Id: OTP-9140</p>
</item>
<item>
<p>
The send_timeout option in gen_tcp did not work properly
in active mode or with {active,once} options. This is now
corrected.</p>
<p>
Own Id: OTP-9145</p>
</item>
<item>
<p>
Fixed various typos across the documentation (Thanks to
Tuncer Ayaz)</p>
<p>
Own Id: OTP-9154</p>
</item>
<item>
<p>Remove duplicate stack entries which could occur after
calling certain BIFs.</p>
<p>
Own Id: OTP-9163</p>
</item>
<item>
<p>
A race when starting two nodes simultaneously using
run_erl has been removed.</p>
<p>
Own Id: OTP-9164</p>
</item>
<item>
<p>
Add documentation on .erlang processing back again
(Thanks to Gabor Liptak)</p>
<p>
Own Id: OTP-9189</p>
</item>
<item>
<p>
Remove gratuitous paren in driver_entry(Thanks to Tuncer
Ayaz)</p>
<p>
Own Id: OTP-9192</p>
</item>
<item>
<p>
Fix some wrong pointer dereferences (Thanks to Cristian
Greco)</p>
<p>
Own Id: OTP-9194</p>
</item>
<item>
<p>
erts: Remove unused variables (Thanks to Tuncer Ayaz)</p>
<p>
Own Id: OTP-9205</p>
</item>
<item>
<p>
The documentation for <c>init:get_args/0</c> has been
removed. <c>init:get_args/0</c> itself was deprecated in
R9C and removed in R12B. (Thanks to Eric Pailleau.)</p>
<p>
Own Id: OTP-9209</p>
</item>
<item>
<p>
Allow user to specify the IP address epmd binds to</p>
<p>
The IP address(es) epmd binds to can now be specified by
the user, either via epmd's new "-address" option or (if
that's not used) by setting the environment variable
ERL_EPMD_ADDRESS. Multiple addresses may be specified
using a comma-separated list. If the loopback address is
not in this list, it will be added implicitly, so that
the daemon can be queried by an interactive epmd
process.(Thanks to Holger Weiß)</p>
<p>
Own Id: OTP-9213</p>
</item>
<item>
<p>
epmd: include host address in local access check</p>
<p>
In FreeBSD jails, the source and destination address of
connections to localhost are changed to be the IP address
of the jail. Consider connections from the host's IP
address to itself (e.g., the source and destination
address match) to be local for the access control checks.
(Thanks to Michal Santos and Tom at diogunix.com)</p>
<p>
Own Id: OTP-9214</p>
</item>
<item>
<p>
Fix list returned by net_kernel:epmd_module</p>
<p>
Function epmd_module of net_kernel returns a list instead
of an atom, when the epmd_module-flag is used. (Thanks to
Markus Knofe)</p>
<p>
Own Id: OTP-9215</p>
</item>
<item>
<p>
Fix epmd's dbg_perror() output</p>
<p>
The dbg_perror() function now hands the current errno
value over to dbg_gen_printf(). This fixes the problem
that errno had been reset to zero by the time it was used
(to print the corresponding error message) in the
dbg_gen_printf() function. (Thanks to Holger Weiß)</p>
<p>
Own Id: OTP-9223</p>
</item>
<item>
<p>
heart: remove garbage appended to heart command</p>
<p>
heart:get_cmd/0 is documented to return an empty string
if the command is cleared. get_cmd/0 returns 2 extra
bytes: 1 byte for the trailing null, 1 byte from the op
(the op is an unsigned char and 2 bytes are allocated for
it in the returned buffer). (Thanks to Michael Santos)</p>
<p>
Own Id: OTP-9224</p>
</item>
<item>
<p>
file: fix hang reading compressed files</p>
<p>
The gzio driver goes into an infinite loop when reading
past the end of a compressed file. Reported-By: Alex
Morarash (Thanks to Michael Santos)</p>
<p>
Own Id: OTP-9245</p>
</item>
<item>
<p>Eliminate alias warnings from gcc 4.5.2</p>
<p>
Own Id: OTP-9250</p>
</item>
<item>
<p>
Unsigned integer may overflow in error message (Thanks to
Michael Santos)</p>
<p>
Own Id: OTP-9251</p>
</item>
<item>
<p>
Driver names should be strings, not atoms</p>
<p>
Own Id: OTP-9253</p>
</item>
<item>
<p>
driver_entry: Remove gratuitous paren and fix typo
(Thanks to Tuncer Ayaz)</p>
<p>
Own Id: OTP-9254</p>
</item>
<item>
<p>
Fix format specifiers in erl_exit messages</p>
<p>
Fix an error message by using an unsigned integer
specifier as seen in a tweet by @metabrew: #erlang VM
crashed with "no next heap size found: -2090496108,
offset 0", suddenly allocated all available RAM</p>
<p>
Also correct mis-typed string formats in bif.c.(Thanks to
Michael Santos)</p>
<p>
Own Id: OTP-9262</p>
</item>
<item>
<p>
net_drv: remove unused tcp request id inet_drv: remove
gratuitous assignment (Thanks to Tuncer Ayaz)</p>
<p>
Own Id: OTP-9263</p>
</item>
<item>
<p>
Teach run_erl RUN_ERL_DISABLE_FLOWCNTRL for disabling
flow control</p>
<p>
Flow control can cause unwanted behaviour of the beam
process, if accidentally hit Ctrl-S (instead of Ctrl-D to
detach) the entire beam may be blocked.</p>
<p>
Fix this problem by making it possible to turn off flow
control by setting the environment variable
RUN_ERL_DISABLE_FLOWCNTRL. (Thanks to Jonas Faklkevik)</p>
<p>
Own Id: OTP-9270</p>
</item>
<item>
<p>The following bugs due to missing memory barriers have
been fixed:</p> <list> <item><p> ETS tables using the
<c>write_concurrency</c> option could potentially get
into an internally inconsistent state. </p></item>
<item><p> ETS tables using the <c>ordered_set</c> option
could potentially get into an internally inconsistent
state. </p></item> <item><p> A number of memory barriers
have been added when building with the
<c>libatomic_ops</c> API (i.e. when passing
<c>--with-libatomic_ops=PATH</c> to <c>configure</c>) and
the tilera atomics API (i.e. when building for the tilera
chip). Note that these bugs were due to erroneous usage
of the APIs, and not in the implementations of the APIs.
When using these APIs the following bugs where
present:</p> <list> <item><p> The BIF
<c>erlang:ports/0</c> could return an erroneous result.
</p></item> <item><p> A thread blocking other threads
during code loading, or setup of tracing could
potentially read invalid data. </p></item> <item><p>
Fixation of ETS tables could potentially get into an
internally inconsistent state. </p></item> </list>
</item> </list>
<p>
Own Id: OTP-9281</p>
</item>
<item>
<p>
Fix halfword bug for ETS ordered_set when doing
<c>select/match</c> with partly bound key.</p>
<p>
Own Id: OTP-9292</p>
</item>
<item>
<p>
Fix bug in <c>code:is_module_native</c> that caused crash
for deleted modules.</p>
<p>
Own Id: OTP-9298</p>
</item>
<item>
<p>
Calling <c>driver_async_cancel()</c> could cause a
scheduler thread to enter an eternal loop doing no useful
work. (Thanks to Anders Ramsell)</p>
<p>
Own Id: OTP-9302</p>
</item>
</list>
</section>
<section><title>Improvements and New Features</title>
<list>
<item>
<p>
New <c>enif_is_exception function</c> to allow NIFs to
determine whether an <c>ERL_NIF_TERM</c> represents an
exception. (Thanks to Steve Vinoski)</p>
<p>
Own Id: OTP-9150</p>
</item>
<item>
<p>
A process being garbage collected by another process
could be scheduled on another scheduler. This prevented
this scheduler from doing any useful work until the
garbage collection was done. This either occurred due to
a explicit call to the <c>garbage_collect/1</c> BIF, or
due to a garbage collection part of code loading. A
process being garbage collected like this will now not be
scheduled until the garbage collection has completed.</p>
<p>
Own Id: OTP-9211</p>
</item>
<item>
<p>
Remove unnecessary validation copy in
prim_file:drv_command/3 (Thanks to Tony Rogvall)</p>
<p>
Own Id: OTP-9276</p>
</item>
<item>
<p>
Symbolic link handling on windows have been slightly
updated to map error conditions more consequently and
correctly read directory links created outside of the
Erlang environment.</p>
<p>
Own Id: OTP-9279</p>
</item>
<item>
<p>
Due to standard library DLL mismatches between versions
of OpenSSL and Erlang/OTP, OpenSSL is now linked
statically to the crypto driver on Windows. This fixes
problems starting crypto when running Erlang as a service
on all Windows versions.</p>
<p>
Own Id: OTP-9280</p>
</item>
<item>
<p>Halfword emulator memory handling improvements:</p>
<list> <item><p>Much more of internal memory structures
have been made able to use "high" memory and are no
longer restricted to the 4Gb limit that still applies for
all process heap data.</p> </item> <item><p>Fixed faulty
values from <c>erlang:memory()</c> caused by 32-bit
counter overflow.</p> </item> <item><p>New counter
<c>low</c> in <c>erlang:memory()</c> that sums up all
memory restricted by 4Gb limit.</p> </item> </list>
<p>
Own Id: OTP-9291 Aux Id: seq11841 </p>
</item>
<item>
<p>
The value set in the undocumented and unsupported
ERL_version_FLAGS (e.g. ERL_R14B03_FLAGS) environment
variable can now be overridden by the command line
(similar to ERL_AFLAGS).</p>
<p>
Own Id: OTP-9297</p>
</item>
</list>
</section>
</section>
<section><title>Erts 5.8.3.2</title>
<section><title>Known Bugs and Problems</title>
<list>
<item>
<p>
Fix halfword emulator bug in <c>ets:select_delete</c> for
<c>ordered_set</c> that caused emulator to crash.</p>
<p>
Own Id: OTP-9258 Aux Id: seq11836 </p>
</item>
</list>
</section>
</section>
<section><title>Erts 5.8.3.1</title>
<section><title>Fixed Bugs and Malfunctions</title>
<list>
<item>
<p>
Ets table type ordered_set could order large integer keys
wrongly on pure 64bit platforms. This is now corrected.</p>
<p>
Own Id: OTP-9181</p>
</item>
<item>
<p>
The status of a process was unnecessarily set to waiting
before a process was enqueued in a run queue. This bug
was harmless up until OTP-R14B01. In OTP-R14B02
<c>erlang:hibernate/3</c> was fixed (OTP-9125). After the
introduction of OTP-9125, the previously harmless process
status bug sometimes caused erroneous badarg exceptions
from <c>process_info()</c>.</p>
<p>
OTP-9125 also introduced a thread unsafe access to the
status field of a process which now also have been fixed.</p>
<p>
*** INCOMPATIBILITY with noxs ***</p>
<p>
Own Id: OTP-9197</p>
</item>
</list>
</section>
</section>
<section><title>Erts 5.8.3</title>
<section><title>Fixed Bugs and Malfunctions</title>
<list>
<item>
<p>
The scroll wheel now scrolls the werl window on Windows.</p>
<p>
Own Id: OTP-8985</p>
</item>
<item>
<p>
Some malformed distribution messages could cause VM to
crash, this is now corrected.</p>
<p>
Own Id: OTP-8993</p>
</item>
<item>
<p>
The OS function getifaddrs() can return NULL in some
address fields for e.g PPP and tunnel devices which
caused the emulator to segfault. This bug has now been
corrected.</p>
<p>
Own Id: OTP-8996</p>
</item>
<item>
<p>
The expression &lt;&lt;A:0&gt;&gt; would always produce
an empty binary, even if <c>A</c> was not an integer.
Corrected to cause a <c>badarg</c> exception if the type
of <c>A</c> is invalid. (Thanks to Zvi.)</p>
<p>
Own Id: OTP-8997</p>
</item>
<item>
<p>
A bug that potentially could cause an emulator crash when
deleting an ETS-table has been fixed. A resource leak
when hitting the maximum amount of ETS-tables allowed has
also been fixed.</p>
<p>
Own Id: OTP-8999</p>
</item>
<item>
<p>
A bug in the <c>exit/2</c> BIF could potentially cause an
emulator crash.</p>
<p>
Own Id: OTP-9005</p>
</item>
<item>
<p>
Due to a bug in glibc the runtime system could abort
while trying to destroy a mutex. The runtime system will
now issue a warning instead of aborting.</p>
<p>
Own Id: OTP-9009</p>
</item>
<item>
<p>
A bug in epmd could create strange behaviour when
listen() calls failed. This is now corrected thanks to
Steve Vinoski.</p>
<p>
Own Id: OTP-9024</p>
</item>
<item>
<p>When setting file_info the win32_driver will now
correctly set access and modified time. Previously these
entities were swapped.</p>
<p>
Own Id: OTP-9046</p>
</item>
<item>
<p>
Setting scheduler bind type to <c>unbound</c> failed if
binding of schedulers wasn't supported, or if CPU
topology wasn't present. This even though the
documentation stated that it is possible to set the bind
type to <c>unbound</c>.</p>
<p>
Own Id: OTP-9056 Aux Id: Seq11779 </p>
</item>
<item>
<p>Two problems were fixed in crash dump: The time left
for timers are now shown as unsigned integers and the
contents of ordered_set ETS tables is no longer
included.</p>
<p>
Own Id: OTP-9057</p>
</item>
<item>
<p>
The VM could fail to set IP_TOS and SO_PRIORITY in
certain situations, either because sockets were supplied
as open file descriptors, or because SO_PRIORITY by
default was set higher than the user can explicitly set
it to. Those situations are now handled.</p>
<p>
Own Id: OTP-9069</p>
</item>
<item>
<p>
Wx on MacOS X generated complains on stderr about certain
cocoa functions not beeing called from the "Main thread".
This is now corrected.</p>
<p>
Own Id: OTP-9081</p>
</item>
<item>
<p>
Fix a couple typos in driver_entry(3) (thanks to Tuncer
Ayaz).</p>
<p>
Own Id: OTP-9085</p>
</item>
<item>
<p>
Mention that "-detached" implies "-noinput"</p>
<p>
Clarify that specifying "-noinput" is unnecessary if the
"-detached" flag is given. (thanks to Holger Weiß)</p>
<p>
Own Id: OTP-9086</p>
</item>
<item>
<p>
A potential problem (found by code inspection) when
calling a fun whose code was not loaded has been fixed.</p>
<p>
Own Id: OTP-9095</p>
</item>
<item>
<p>
The emulator could get into a state where it didn't check
for I/O.</p>
<p>
Own Id: OTP-9105 Aux Id: Seq11798 </p>
</item>
<item>
<p>
Attempting to create binaries exceeding 2Gb (using for
example <c>term_to_binary/1</c>) would crash the emulator
with an attempt to allocate huge amounts of memory.
(Thanks to Jon Meredith.)</p>
<p>
Own Id: OTP-9117</p>
</item>
<item>
<p>
Fix erlang:hibernate/3 on HiPE enabled emulator (Thanks
to Paul Guyot)</p>
<p>
Own Id: OTP-9125</p>
</item>
</list>
</section>
<section><title>Improvements and New Features</title>
<list>
<item>
<p>From this release, the previously experimental
halfword emulator is now official. It can be enabled by
giving the <c>--enable-halfword-emulator</c> option to
the <c>configure</c> script.</p>
<p>The halfword emulator is a 64-bit application, but
uses halfwords (32-bit words) for all data in Erlang
processes, therefore using less memory and being faster
than the standard 64-bit emulator. The total size of all
BEAM code and all process data for all processes is
limited to 4Gb, but ETS tables and off-heap binaries are
only limited by the amount of available memory.</p>
<p>
Own Id: OTP-8941</p>
</item>
<item>
<p>
32-bit atomic memory operations have been introduced
internally in the run time system, and are now used where
appropriate. There were previously only atomic memory
operations of word size available. The 32-bit atomic
memory operations slightly reduce memory consumption, and
slightly improve performance on 64-bit runtime systems.</p>
<p>
Own Id: OTP-8974</p>
</item>
<item>
<p>
Performance enhancements for looking up timer-entries and
removing timers from the wheel.</p>
<p>
Own Id: OTP-8990</p>
</item>
<item>
<p>
Write accesses to ETS tables have been optimized by
reducing the amount of atomic memory operations needed
during a write access.</p>
<p>
Own Id: OTP-9000</p>
</item>
<item>
<p>
Strange C coding in the VM made the -D_FORTIFY_SOURCE
option to gcc-4.5 react badly. The code is now cleaned up
so that it's accepted by gcc-4.5.</p>
<p>
Own Id: OTP-9025</p>
</item>
<item>
<p>
The memory footprint for loaded code has been somewhat
reduced (especially in the 64-bit BEAM machine).</p>
<p>
Own Id: OTP-9030</p>
</item>
<item>
<p>
The maximum number of allowed arguments for an Erlang
function has been lowered from 256 to 255, so that the
number of arguments can now fit in a byte.</p>
<p>
Own Id: OTP-9049</p>
</item>
<item>
<p>
Dependency generation for Makefiles has been added to the
compiler and erlc. See the manual pages for
<c>compile</c> and <c>erlc</c>. (Thanks to Jean-Sebastien
Pedron.)</p>
<p>
Own Id: OTP-9065</p>
</item>
</list>
</section>
</section>
<section><title>Erts 5.8.2</title>
<section><title>Fixed Bugs and Malfunctions</title>
<list>
<item>
<p> Fix format_man_pages so it handles all man sections
and remove warnings/errors in various man pages. </p>
<p>
Own Id: OTP-8600</p>
</item>
<item>
<p>
The <c>configure</c> command line argument <seealso
marker="doc/installation_guide:INSTALL#How-to-Build-and-Install-ErlangOTP_A-Closer-Look-at-the-individual-Steps_Configuring">--enable-ethread-pre-pentium4-compatibility</seealso>
had no effect. This option is now also automatically
enabled if required on the build machine.</p>
<p>
Own Id: OTP-8847</p>
</item>
<item>
<p>
Windows 2003 and Windows XP pre SP3 would sometimes not
start the Erlang R14B VM at all due to a bug in the cpu
topology detection. The bug affects Windows only, no
other platform is even remotely affected. The bug is now
corrected.</p>
<p>
Own Id: OTP-8876</p>
</item>
<item>
<p>
The HiPE run-time in the 64-bit emulator could do a
64-bit write to a 32-bit struct field. It happened to be
harmless on Intel/AMD processors. Corrected. (Thanks to
Mikael Pettersson.)</p>
<p>
Own Id: OTP-8877</p>
</item>
<item>
<p>
A bug in <seealso
marker="erl_driver#erl_drv_tsd_get">erl_drv_tsd_get()</seealso>
and <seealso
marker="erl_nif#enif_tsd_get">enif_tsd_get()</seealso>
could cause an emulator crash. These functions are
currently not used in OTP. That is, the crash only occur
on systems with user implemented NIF libraries, or
drivers that use one of these functions.</p>
<p>
Own Id: OTP-8889</p>
</item>
<item>
<p>
Calling <c>erlang:system_info({cpu_topology,
CpuTopologyType})</c> with another <c>CpuTopologyType</c>
element than one of the documented atoms <c>defined</c>,
<c>detected</c>, or <c>used</c> caused an emulator crash.
(Thanks to Paul Guyot)</p>
<p>
Own Id: OTP-8914</p>
</item>
<item>
<p>
The ERTS internal rwlock implementation could get into an
inconsistent state. This bug was very seldom triggered,
but could be during heavy contention. The bug was
introduced in R14B (erts-5.8.1).</p>
<p>
The bug was most likely to be triggered when using the
<c>read_concurrency</c> option on an ETS table that was
frequently accessed from multiple processes doing lots of
writes and reads. That is, in a situation where you
typically don't want to use the <c>read_concurrency</c>
option in the first place.</p>
<p>
Own Id: OTP-8925 Aux Id: OTP-8544 </p>
</item>
<item>
<p>
Tracing to port could cause an emulator crash when
unloading the trace driver.</p>
<p>
Own Id: OTP-8932</p>
</item>
<item>
<p>
Removed use of CancelIoEx on Windows that had been shown
to cause problems with some drivers.</p>
<p>
Own Id: OTP-8937</p>
</item>
<item>
<p>
The fallback implementation used when no native atomic
implementation was found did not compile. (Thanks to
Patrick Baggett, and Tuncer Ayaz)</p>
<p>
Own Id: OTP-8944</p>
</item>
<item>
<p>
Some integer values used during load balancing could
under rare circumstances wrap causing a load unbalance
between schedulers.</p>
<p>
Own Id: OTP-8950</p>
</item>
<item>
<p>
The windows VM now correctly handles appending to large
files (> 4GB).</p>
<p>
Own Id: OTP-8958</p>
</item>
<item>
<p>
Name resolving of IPv6 addresses has been implemented for
Windows versions that support it. The use of ancient
resolver flags (AI_V4MAPPED | AI_ADDRCONFIG) to the
getaddrinfo() function has been removed since e.g FreeBSD
regard mapped IPv4 addresses to be a security problem and
the semantics of the address configured flag is
uncertain.</p>
<p>
Own Id: OTP-8969</p>
</item>
</list>
</section>
<section><title>Improvements and New Features</title>
<list>
<item>
<p>
The help texts produced by the <c>configure</c> scripts
in the top directory and in the erts directory have been
aligned and cleaned up.</p>
<p>
Own Id: OTP-8859</p>
</item>
<item>
<p>
When the runtime system had fewer schedulers than logical
processors, the system could get an unnecessarily large
amount reader groups.</p>
<p>
Own Id: OTP-8861</p>
</item>
<item>
<p>
<c>run_rel</c> has been updated to support Solaris's
/dev/ptmx device and to load the necessary STREAMS
modules so that <c>to_erl</c> can provide terminal echo
of keyboard input. (Thanks to Ryan Tilder.)</p>
<p>
Own Id: OTP-8878</p>
</item>
<item>
<p>
The Erlang VM now supports Unicode filenames. The feature
is turned on by default on systems where Unicode
filenames are mandatory (Windows and MacOSX), but can be
enabled on other systems with the '+fnu' emulator option.
Enabling the Unicode filename feature on systems where it
is not default is however considered experimental and not
to be used for production. Together with the Unicode file
name support, the concept of "raw filenames" is
introduced, which means filenames provided without
implicit unicode encoding translation. Raw filenames are
provided as binaries, not lists. For further information,
see stdlib users guide and the chapter about using
Unicode in Erlang. Also see the file module manual page.</p>
<p>
*** POTENTIAL INCOMPATIBILITY ***</p>
<p>
Own Id: OTP-8887</p>
</item>
<item>
<p>Buffer overflows have been prevented in <c>erlc</c>,
<c>dialyzer</c>, <c>typer</c>, <c>run_test</c>,
<c>heart</c>, <c>escript</c>, and <c>erlexec</c>.</p>
(Thanks to Michael Santos.)
<p>
Own Id: OTP-8892</p>
</item>
<item>
<p>
The runtime system is now less eager to suspend processes
sending messages over the distribution. The default value
of the distribution buffer busy limit has also been
increased from 128 KB to 1 MB. This in order to improve
throughput.</p>
<p>
Own Id: OTP-8901</p>
</item>
<item>
<p>
The distribution buffer busy limit can now be configured
at system startup. For more information see the
documentation of the <c>erl</c> <seealso
marker="erl#+zdbbl">+zdbbl</seealso> command line flag.
(Thanks to Scott Lystig Fritchie)</p>
<p>
Own Id: OTP-8912</p>
</item>
<item>
<p>
The inet driver internal buffer stack implementation has
been rewritten in order to reduce lock contention.</p>
<p>
Own Id: OTP-8916</p>
</item>
<item>
<p>
New ETS option <c>compressed</c>, to enable a more
compact storage format at the expence of heavier table
operations. For test and evaluation, <c>erl +ec</c> can
be used to force compression on all ETS tables.</p>
<p>
Own Id: OTP-8922 Aux Id: seq11658 </p>
</item>
<item>
<p>
There is now a new function inet:getifaddrs/0 modeled
after C library function getifaddrs() on BSD and LInux
that reports existing interfaces and their addresses on
the host. This replaces the undocumented and unsupported
inet:getiflist/0 and inet:ifget/2.</p>
<p>
Own Id: OTP-8926</p>
</item>
<item>
<p>
Support for detection of CPU topology and binding of
schedulers on FreeBSD 8 have been added. (Thanks to Paul
Guyot)</p>
<p>
Own Id: OTP-8939</p>
</item>
<item>
<p>
Several bugs related to hibernate/3 and HiPE have been
corrected. (Thanks to Paul Guyot.)</p>
<p>
Own Id: OTP-8952</p>
</item>
<item>
<p>
Support for soft and hard links on Windows versions and
filesystems that support them is added.</p>
<p>
Own Id: OTP-8955</p>
</item>
<item>
<p>
The win32 virtual machine is now linked large address
aware. his allows the Erlang VM to use up to 3 gigs of
address space on Windows instead of the default of 2
gigs.</p>
<p>
Own Id: OTP-8956</p>
</item>
</list>
</section>
</section>
<section><title>Erts 5.8.1.2</title>
<section><title>Fixed Bugs and Malfunctions</title>
<list>
<item>
<p> Fix that the documentation top index generator can
handle an Ericsson internal application group. </p>
<p>
Own Id: OTP-8875</p>
</item>
<item>
<p>In embedded mode, on_load handlers that called
<c>code:priv_dir/1</c> or other functions in <c>code</c>
would hang the system. Since the <c>crypto</c>
application now contains an on_loader handler that calls
<c>code:priv_dir/1</c>, including the <c>crypto</c>
application in the boot file would prevent the system
from starting.</p>
<p>Also extended the <c>-init_debug</c> option to print
information about on_load handlers being run to
facilitate debugging.</p>
<p>
Own Id: OTP-8902 Aux Id: seq11703 </p>
</item>
</list>
</section>
</section>
<section><title>Erts 5.8.1.1</title>
<section><title>Fixed Bugs and Malfunctions</title>
<list>
<item>
<p>
Windows 2003 and Windows XP pre SP3 would sometimes not
start the Erlang R14B VM at all due to a bug in the cpu
topology detection. The bug affects Windows only, no
other platform is even remotely affected. The bug is now
corrected.</p>
<p>
Own Id: OTP-8876</p>
</item>
</list>
</section>
</section>
<section><title>Erts 5.8.1</title>
<section><title>Fixed Bugs and Malfunctions</title>
<list>
<item>
<p>
Very small floating point numbers generated errors when
converting from list to float in some versions of the VM,
this is now corrected so that i.e.
list_to_float("1.0e-324"). returns 0.0 in all versions of
Erlang.</p>
<p>
Own Id: OTP-7178</p>
</item>
<item>
<p>
Windows Vista and Windows 7 file system virtualization,
which makes "old style" windows programs execute in a
file system sandbox, was previously unintentionally
turned on for the Erlang VM. This is now corrected so
that i.e. writes to C:\Program Files\. without
administrator privileges will fail.</p>
<p>
Own Id: OTP-7405</p>
</item>
<item>
<p>
Fix faulty 64-bit integer term output from drivers. Large
64-bits integers did not generate correct bignums and
could even cause emulator crash. Only affects drivers
using ERL_DRV_INT64 or ERL_DRV_UINT64, introduced in
R13B03.</p>
<p>
Own Id: OTP-8716</p>
</item>
<item>
<p>
Fixed: inet:setopts(S, [{linger,{true,2}}]) returned
{error,einval} for SCTP sockets. The inet_drv had a bug
when checking the option size.</p>
<p>
Own Id: OTP-8726 Aux Id: seq11617 </p>
</item>
<item>
<p>Fix libm linking with --as-needed flag
<p>
When building with "--as-needed" linker flags on Linux
the build will fail. This has now been fixed.</p>
<p>
(Thanks to Christian Faulhammer)</p></p>
<p>
Own Id: OTP-8728</p>
</item>
<item>
<p>
gen_udp:connect/3 was broken for SCTP enabled builds. It
did not detect remote end errors as it should.</p>
<p>
Own Id: OTP-8729</p>
</item>
<item>
<p>Reduce the risk of integer wrapping in bin vheap size
counting.</p> <p>The vheap size series will now use the
golden ratio instead of doubling and fibonacci
sequences.</p>
<p>
Own Id: OTP-8730</p>
</item>
<item>
<p>
ETS ordered_set containing <c>[]</c> as key could cause
strange thing to happen, like an infinite hanging
<c>ets:select</c>.</p>
<p>
Own Id: OTP-8732</p>
</item>
<item>
<p>reference() has been substituted for ref() in the
documentation.</p>
<p>
Own Id: OTP-8733</p>
</item>
<item>
<p>
When a native compiled module called a not loaded
non-native compiled module that had an on_load function,
the export entries were trashed after code loading so on
the next call from the native compiled module to the
non-native compiled the emulator crashed. This bug has
now been fixed.</p>
<p>
Own Id: OTP-8736</p>
</item>
<item>
<p>
HiPE-enabled Erlang VMs running on BSD systems sometimes
generated messages like "Yikes! erts_alloc() returned
misaligned address 0x8016a512c". Fixed. (Thanks to Mikael
Pettersson.)</p>
<p>
Own Id: OTP-8769</p>
</item>
<item>
<p>
A race condition in <c>erts_poll()</c> could cause delay
of poll for I/O.</p>
<p>
Own Id: OTP-8773</p>
</item>
<item>
<p>
Removed some potential vulnerabilities from the Erlang
Port Mapper Daemon (epmd) and straightened up access
control. Also removed hazardous interfaces allowing
anyone on a machine to forcefully unregister other nodes.
This means that the ei_unregister/erl_unregister
interfaces in erl_interface is rendered not only error
prone and mystifying as before, but totally ineffective.
The old behaviour of unchecked node unregistering can be
restored if needed, see epmd documentation for details.</p>
<p>
*** POTENTIAL INCOMPATIBILITY ***</p>
<p>
Own Id: OTP-8780</p>
</item>
<item>
<p> Building in a source tree without prebuilt platform
independent build results failed on the SSL examples
when: </p> <list><item> cross building. This has been
solved by not building the SSL examples during a cross
build. </item><item> building on Windows. </item></list>
<p>
Own Id: OTP-8791</p>
</item>
<item>
<p>
inet:getsockopt for SCTP sctp_default_send_param had a
bug to not initialize required feilds causing random
answers. It is now corrected.</p>
<p>
Own Id: OTP-8795 Aux Id: seq11655 </p>
</item>
<item>
<p>
The hipe_bifs:get_hrvtime/0 BIF now always returns a real
value even if the "perfctr" Linux kernel extension is not
available. It used to return a dummy value. (Thanks to
Mikael Pettersson.)</p>
<p>
Own Id: OTP-8798</p>
</item>
<item>
<p>
Calling a native-code compiled module with an
<c>on_load</c> function could cause a crash. (Thanks to
Mikael Pettersson.)</p>
<p>
Own Id: OTP-8799</p>
</item>
<item>
<p>The emulator could crash while writing a crash dump if
native-compiled modules had been loaded. (Thanks to Paul
Guyot.)</p>
<p>
Own Id: OTP-8801</p>
</item>
<item>
<p>
The garbage collector could crash if invoked from
native-compiled code after a call to a BIF. (Thanks to
Paul Guyot.)</p>
<p>
Own Id: OTP-8821</p>
</item>
<item>
<p>
A rare memory leak in binary:matches is removed</p>
<p>
Own Id: OTP-8823</p>
</item>
<item>
<p>For a socket in the HTTP packet mode, the return value
from <c>gen_tcp:recv/2,3</c> if there is an error in the
header will be <c>{ok,{http_error,String}}</c> instead of
<c>{error,{http_error,String}}</c> to be consistent with
<c>ssl:recv/2,3</c>.</p>
<p>
*** POTENTIAL INCOMPATIBILITY ***</p>
<p>
Own Id: OTP-8831</p>
</item>
</list>
</section>
<section><title>Improvements and New Features</title>
<list>
<item>
<p>
ets:select_reverse/{1,2,3} are now documented.</p>
<p>
Own Id: OTP-7863</p>
</item>
<item>
<p>
External format of integers changed to make full use of
all 32 bits of INTEGER_EXT. This is a compatible change
as old code can read full 32-bit integers but only
produce 28-bit integers as INTEGER_EXT.</p>
<p>
Own Id: OTP-8540 Aux Id: seq11534 </p>
</item>
<item>
<p>
Large parts of the <c>ethread</c> library have been
rewritten. The <c>ethread</c> library is an Erlang
runtime system internal, portable thread library used by
the runtime system itself.</p>
<p>
Most notable improvement is a reader optimized rwlock
implementation which dramatically improve the performance
of read-lock/read-unlock operations on multi processor
systems by avoiding ping-ponging of the rwlock cache
lines. The reader optimized rwlock implementation is used
by miscellaneous rwlocks in the runtime system that are
known to be read-locked frequently, and can be enabled on
ETS tables by passing the <seealso
marker="stdlib:ets#new_2_read_concurrency">{read_concurrency,
true}</seealso> option upon table creation. See the
documentation of <seealso
marker="stdlib:ets#new/2">ets:new/2</seealso> for more
information. The reader optimized rwlock implementation
can be fine tuned when starting the runtime system. For
more information, see the documentation of the <seealso
marker="erts:erl#+rg">+rg</seealso> command line argument
of <c>erl</c>.</p>
<p>
There is also a new implementation of rwlocks that is not
optimized for readers. Both implementations interleaves
readers and writers during contention as opposed to,
e.g., the NPTL (Linux) pthread rwlock implementation
which use either a reader or writer preferred strategy.
The reader/writer preferred strategy is problematic since
it starves threads doing the non-preferred operation.</p>
<p>
The new rwlock implementations in general performs better
in ERTS than common pthread implementations. However, in
some extremely heavily contended cases this is not the
case. Such heavy contention can more or less only appear
on ETS tables. This when multiple processes do very large
amounts of write locked operations simultaneously on the
same table. Such use of ETS is bad regardless of rwlock
implementation, will never scale, and is something we
strongly advise against.</p>
<p>
The new rwlock implementations depend on atomic
operations. If no native atomic implementation is found,
a fallback solution will be used. Using the fallback
implies a performance degradation. That is, it is more
important now than before to build OTP with a native
atomic implementation.</p>
<p>
The <c>ethread</c> library contains native atomic
implementations for, x86 (32 and 64 bit), powerpc (32
bit), sparc V9 (32 and 64 bit), and tilera (32 bit). On
other hardware gcc's builtin support for atomic memory
access will be used if such exists. If no such support is
found, <c>configure</c> will warn about no atomic
implementation available.</p>
<p>
The <c>ethread</c> library can now also use the
<c>libatomic_ops</c> library for atomic memory accesses.
This makes it possible for the Erlang runtime system to
utilize optimized native atomic operations on more
platforms than before. If <c>configure</c> warns about no
atomic implementation available, try using the
<c>libatomic_ops</c> library. Use the <seealso
marker="doc/installation_guide:INSTALL#How-to-Build-and-Install-ErlangOTP_A-Closer-Look-at-the-individual-Steps_Configuring">--with-libatomic_ops=PATH</seealso>
<c>configure</c> command line argument when specifying
where the <c>libatomic_ops</c> installation is located.
The <c>libatomic_ops</c> library can be downloaded from:
<url
href="http://www.hpl.hp.com/research/linux/atomic_ops/">http://www.hpl.hp.com/research/linux/atomic_ops/</url></p>
<p>
The changed API of the <c>ethread</c> library has also
caused modifications in the Erlang runtime system.
Preparations for the to come "delayed deallocation"
feature has also been done since it depends on the
<c>ethread</c> library.</p>
<p>
<em>Note</em>: When building for x86, the <c>ethread</c>
library will now use instructions that first appeared on
the pentium 4 processor. If you want the runtime system
to be compatible with older processors (back to 486) you
need to pass the <seealso
marker="doc/installation_guide:INSTALL#How-to-Build-and-Install-ErlangOTP_A-Closer-Look-at-the-individual-Steps_Configuring">--enable-ethread-pre-pentium4-compatibility</seealso>
<c>configure</c> command line argument when configuring
the system.</p>
<p>
Own Id: OTP-8544</p>
</item>
<item>
<p>
erlang:localtime_to_universaltime({{2008, 8, 1}, {0, 0,
0}},true) when TZ=UTC now behaves consistently on all
Unix platforms.</p>
<p>
The problem fixed was originally reported by Paul Guyot
on erlang-bugs mailing list:</p>
<p>
http://www.erlang.org/pipermail/erlang-bugs/2008-November/001077.html</p>
<p>
Own Id: OTP-8580</p>
</item>
<item>
<p>
Optimization reducing memory consumption by two words per
ETS object.</p>
<p>
Own Id: OTP-8737</p>
</item>
<item>
<p>
Fixes for unsupported halfword-emulator</p>
<p>
Own Id: OTP-8745</p>
</item>
<item>
<p>
NIF 64-bit integer support; <c>enif_get_int64</c>,
<c>enif_get_uint64</c>, <c>enif_make_int64</c>,
<c>enif_make_uint64</c>.</p>
<p>
Own Id: OTP-8746</p>
</item>
<item>
<p>
Alignment of trailing data in messages has been adjusted.
This in order to be able to pass data of any type as
trailing data in the future.</p>
<p>
Own Id: OTP-8754</p>
</item>
<item>
<p>
The obsolete/driver.h header file has been removed. It
has been obsolete and deprecated since R8B. Drivers that
still include obsolete/driver.h must be updated to
include erl_driver.h.</p>
<p>
*** POTENTIAL INCOMPATIBILITY ***</p>
<p>
Own Id: OTP-8758</p>
</item>
<item>
<p>
Added erlang:system_info(build_type) which makes it
easier to chose drivers, NIF libraries, etc based on
build type of the runtime system.</p>
<p>
The NIF library for crypto can now be built for valgrind
and/or debug as separate NIF libraries that will be
automatically loaded if the runtime system has been built
with a matching build type.</p>
<p>
Own Id: OTP-8760</p>
</item>
<item>
<p>
Further lessened the memory requirements of ETS objects.</p>
<p>
Own Id: OTP-8762</p>
</item>
<item>
<p>The broken elib_malloc alternate memory allocator has
been removed. <c>erlang:system_info(elib_malloc)</c> will
always return <c>false</c>, and in R15,
<c>erlang:system_info(elib_malloc)</c> will fail with a
<c>badarg</c> exception.</p>
<p>
Own Id: OTP-8764</p>
</item>
<item>
<p>
Calling <c>erlang:system_info/1</c> with the new argument
<c>update_cpu_info</c> will make the runtime system
reread and update the internally stored CPU information.
For more information see the documentation of <seealso
marker="erlang#update_cpu_info">erlang:system_info(update_cpu_info)</seealso>.</p>
<p>
The CPU topology is now automatically detected on Windows
systems with less than 33 logical processors. The runtime
system will now, also on Windows, by default bind
schedulers to logical processors using the
<c>default_bind</c> bind type if the amount of schedulers
is at least equal to the amount of logical processors
configured, binding of schedulers is supported, and a CPU
topology is available at startup.</p>
<p>
Own Id: OTP-8765</p>
</item>
<item>
<p>
The SMP ERTS internal child waiter thread used on Linux
system with NPTL was unintentionally disabled during
cross compilation rewrites (OTP-8323 in R13B03). It has
now been re-enabled. Enabling it again gives a slight
performance improvement.</p>
<p>
Own Id: OTP-8774</p>
</item>
<item>
<p>
<c>epmd</c> used to generate a message to the syslog when
it started up, which could be annoying. This has been
changed to only generate the message if the debug swith
is given. (Thanks to Michael Santos.)</p>
<p>
Own Id: OTP-8775</p>
</item>
<item>
<p>
The scheduler wakeup threshold is now possible to adjust
at system boot. For more information see the <seealso
marker="erl#+swt">+swt</seealso> command line argument of
<c>erl</c>.</p>
<p>
Own Id: OTP-8811</p>
</item>
<item>
<p>
The undocumented function inet:ifget/2 has been improved
to return interface hardware address (MAC) on platforms
supporting getaddrinfo() (such as BSD unixes). Note it
still does not work on all platforms for example not
Windows nor Solaris, so the function is still
undocumented.</p>
<p>
Buffer overflow and field init bugs for inet:ifget/2 and
inet:getservbyname/2 has also been fixed.</p>
<p>
Thanks to Michael Santos.</p>
<p>
Own Id: OTP-8816</p>
</item>
<item>
<p>
Optimizations for MIPS when using gcc atomics. (Thanks to
Steve Vinoski)</p>
<p>
Own Id: OTP-8834</p>
</item>
<item>
<p>
Lock optimization in timer functionality.</p>
<p>
Own Id: OTP-8835</p>
</item>
</list>
</section>
<section><title>Known Bugs and Problems</title>
<list>
<item>
<p>Fix epmd and build environment to build on VxWorks</p>
<p>
Own Id: OTP-8838</p>
</item>
</list>
</section>
</section>
<section><title>Erts 5.8</title>
<section><title>Fixed Bugs and Malfunctions</title>
<list>
<item>
<p>
Driver threads, such as async threads, using <seealso
marker="erl_driver#ErlDrvPDL">port data locks</seealso>
peeked at the port status field without proper locking
when looking up the driver queue.</p>
<p>
Own Id: OTP-8475</p>
</item>
<item>
<p>
The use of <c>mmap()</c> was unnecessarily disabled when
cross compiling.</p>
<p>
The <c>configure</c> arguments <c>--with-ssl</c>, and
<c>--with-odbc</c> refused to accept libraries outside of
<c>$erl_xcomp_sysroot</c> when cross compiling for no
good reason.</p>
<p>
The <c>configure</c> argument <c>--with-odbc</c> didn't
handle the value <c>yes</c> correct.</p>
<p>
The <c>configure</c> arguments <c>--with-odbc</c>, and
<c>--without-odbc</c> have also been added to the
configure help.</p>
<p>
(Thanks to Steve Vinoski for reporting these issues)</p>
<p>
Own Id: OTP-8484</p>
</item>
<item>
<p>
A call to the BIF <c>unregister(RegName)</c> when a port
had the name <c>RegName</c> registered in the runtime
system without SMP support caused a runtime system crash.
(Thanks to Per Hedeland for the bugfix and test case.)</p>
<p>
Own Id: OTP-8487</p>
</item>
<item>
<p>
The runtime system crashed if fewer logical processors
were found than reported by <c>sysconf(
SC_NPROCESSORS_CONF)</c>.</p>
<p>
Own Id: OTP-8549</p>
</item>
<item>
<p>
Fix memory management bug causing crash of non-SMP
emulator with async threads enabled. The bug did first
appear in R13B03.</p>
<p>
Own Id: OTP-8591 Aux Id: seq11554 </p>
</item>
<item>
<p>
Port locks could be prematurely destroyed.</p>
<p>
Own Id: OTP-8612</p>
</item>
<item>
<p>The <c>empd</c> program could loop and consume 100%
CPU time if an unexpected error ocurred in
<c>listen()</c> or <c>accept()</c>. Now <c>epmd</c> will
terminate if a non-recoverable error occurs. (Thanks to
Michael Santos.)</p>
<p>
Own Id: OTP-8618</p>
</item>
<item>
<p>
When kernel poll has been enabled, a livelock could in
rare circumstances occur. Problem reported by Chetan
Ahuja, fix by Mikael Pettersson.</p>
<p>
Own Id: OTP-8632</p>
</item>
<item>
<p>
Windows: Closing port of program that stalled without
reading all data could deadlock scheduler thread.</p>
<p>
Own Id: OTP-8641</p>
</item>
<item>
<p>
On some combination of Montavista Linux on Cavium Octeon
processors, some socket-related system calls returned
other numbers than -1 for errors. This caused a core dump
in inet_drv.c. Now the code works around this problem.</p>
<p>
Own Id: OTP-8654</p>
</item>
<item>
<p>
Missing memory barriers in <c>erts_poll()</c> could cause
the runtime system to hang indefinitely.</p>
<p>
Own Id: OTP-8658</p>
</item>
<item>
<p>
<c>ethr_rwmutex_tryrlock()</c> acquired and refused to
acquire a lock with inverted logic. The lock was however
never acquired in a thread unsafe manner. (Thanks to JR
Zhang for noting this issue)</p>
<p>
Own Id: OTP-8662</p>
</item>
<item>
<p>
Extreme combinations of register/unregister in a highly
parallell SMP application could crash the VM. The error
is corrected.</p>
<p>
Own Id: OTP-8663</p>
</item>
<item>
<p>
On Windows, files are now opened with FILE_SHARE_DELETE
to get closer to Unix semantics.</p>
<p>
Own Id: OTP-8667</p>
</item>
<item>
<p>
<c>erlang:system_info(multi_scheduling)</c> sometimes
erroneously returned <c>enabled</c> when it should have
returned <c>blocked</c>.</p>
<p>
Own Id: OTP-8675</p>
</item>
<item>
<p>
Fix bug causing <c>erlang:decode_packet</c> and
<c>enif_make_string</c> to generate faulty strings with
negative character values for ascii values larger than
127. (Thanks to Paul Guyot)</p>
<p>
Own Id: OTP-8685</p>
</item>
<item>
<p>
<c>open_port/2</c> with the <c>spawn</c> and
<c>spawn_executable</c> options can include an
<c>{env,Env}</c> option. In some cases unsetting
variables would not work on Unix (typically if more
variables were unset than were actually present in the
environment).</p>
<p>
Own Id: OTP-8701</p>
</item>
<item>
<p>
A user defined CPU topology set via a call to <seealso
marker="erlang#system_flag_cpu_topology">erlang:system_flag(cpu_topology,
CPUTopology)</seealso> was not properly verified, and
could in worst case cause an emulator crash. The emulator
crash could only occur when a user defined CPU topology
already existed and was redefined.</p>
<p>
Own Id: OTP-8710</p>
</item>
</list>
</section>
<section><title>Improvements and New Features</title>
<list>
<item>
<p>
The grammar for match specifications in ERTS users guide
only described the tracing dialect of match
specifications. An informal grammar for the ETS dialect
is added.</p>
<p>
Own Id: OTP-8086 Aux Id: seq11333 </p>
</item>
<item>
<p>
The module binary from EEP31 (and EEP9) is implemented.</p>
<p>
Own Id: OTP-8217</p>
</item>
<item>
<p>
New NIF API function <c>enif_make_new_binary</c></p>
<p>
Own Id: OTP-8474</p>
</item>
<item>
<p>
The guard BIF <c>is_boolean/1</c> (introduced in R10B)
has now been included in the lists of BIFs allowed in
guards in the Reference Manual.</p>
<p>
Own Id: OTP-8477</p>
</item>
<item>
<p>
Added function <c>zip:foldl/3</c> to iterate over zip
archives.</p>
<p>
Added functions to create and extract escripts. See
<c>escript:create/2</c> and <c>escript:extract/2</c>.</p>
<p>
The undocumented function <c>escript:foldl/3</c> has been
removed. The same functionality can be achieved with the
more flexible functions <c>escript:extract/2</c> and
<c>zip:foldl/3</c>.</p>
<p>
Record fields has been annotated with type info. Source
files as been adapted to fit within 80 chars and trailing
whitespace has been removed.</p>
<p>
Own Id: OTP-8521</p>
</item>
<item>
<p>A regular expression with many levels of parenthesis
could cause a buffer overflow. That has been corrected.
(Thanks to Michael Santos.)</p>
<p>
Own Id: OTP-8539</p>
</item>
<item>
<p>
<c>erlang:decode_packet(httph_bin,..)</c> could return
corrupt header strings or even crash the VM. This has
been fixed. It only happened on 32-bit VM if the header
name was unknown and between 16 and 20 characters long.
Sockets with simular <c>packet</c> option did not suffer
from this bug.</p>
<p>
Own Id: OTP-8548</p>
</item>
<item>
<p>New NIF features:</p> <list><item> Send messages from
a NIF, or from thread created by NIF, to any local
process (<c>enif_send</c>) </item><item> Store terms
between NIF calls (<c>enif_alloc_env</c>,
<c>enif_make_copy</c>) </item><item> Create binary terms
with user defined memory management
(<c>enif_make_resource_binary</c>) </item></list> <p>And
some incompatible changes made to the API. For more
information see the warning text in <seealso
marker="erl_nif">erl_nif(3)</seealso>.</p>
<p>
*** POTENTIAL INCOMPATIBILITY ***</p>
<p>
Own Id: OTP-8555</p>
</item>
<item>
<p>If the '<c>fop</c>' program (needed for building PDF
files) cannot not be found, it is now possible to build
the HTML and man pages anyway (there will also be dummy
PDF files with no real content created). (Thanks to
Tuncer Ayaz.)</p>
<p>
Own Id: OTP-8559</p>
</item>
<item>
<p>When defining macros the closing right parenthesis
before the dot is now mandatory.</p>
<p>
*** POTENTIAL INCOMPATIBILITY ***</p>
<p>
Own Id: OTP-8562</p>
</item>
<item>
<p>Local and imported functions now override the
auto-imported BIFs when the names clash. The pre R14
behaviour was that auto-imported BIFs would override
local functions. To avoid that old programs change
behaviour, the following will generate an error:</p>
<list><item><p>Doing a call without explicit module name
to a local function having a name clashing with the name
of an auto-imported BIF that was present (and
auto-imported) before OTP R14A</p></item>
<item><p>Explicitly importing a function having a name
clashing with the name of an autoimported BIF that was
present (and autoimported) before OTP R14A</p></item>
<item><p>Using any form of the old compiler directive
<c>nowarn_bif_clash</c></p></item> </list> <p>If the BIF
was added or auto-imported in OTP R14A or later,
overriding it with an import or a local function will
only result in a warning,</p> <p>To resolve clashes, you
can either use the explicit module name <c>erlang</c> to
call the BIF, or you can remove the auto-import of that
specific BIF by using the new compiler directive
<c>-compile({no_auto_import,[F/A]}).</c>, which makes all
calls to the local or imported function without explicit
module name pass without warnings or errors.</p> <p>The
change makes it possible to add auto-imported BIFs
without breaking or silently changing old code in the
future. However some current code ingeniously utilizing
the old behaviour or the <c>nowarn_bif_clash</c> compiler
directive, might need changing to be accepted by the
compiler.</p>
<p>
*** POTENTIAL INCOMPATIBILITY ***</p>
<p>
Own Id: OTP-8579</p>
</item>
<item>
<p>
A bug in re that could cause certain regular expression
matches never to terminate is corrected. (Thanks to
Michael Santos and Gordon Guthrie.)</p>
<p>
Own Id: OTP-8589</p>
</item>
<item>
<p>The erlang:open_port spawn and spawn_executable
directives can include an <c>{env,Env}</c> directive to
set up environment variables for the spawned process. A
bug prevented applications from using <c>{env,Env}</c> to
set an environment variable whose value ended with a
'<c>=</c>' (equal sign) character; the trailing equal
sign was mistaken as an indication that an environment
variable was to be cleared from the environment of the
spawned process. (Thanks to Steve Vinoski.)</p>
<p>
Own Id: OTP-8614</p>
</item>
<item>
<p><c>receive</c> statements that can only read out a
newly created reference are now specially optimized so
that it will execute in constant time regardless of the
number of messages in the receive queue for the process.
That optimization will benefit calls to
<c>gen_server:call()</c>. (See <c>gen:do_call/4</c> for
an example of a receive statement that will be
optimized.)</p>
<p>
Own Id: OTP-8623</p>
</item>
<item>
<p>
The functions file:advise/4 and file:datasync/1 have been
added. (Thanks to Filipe David Manana.)</p>
<p>
Own Id: OTP-8637</p>
</item>
<item>
<p>
New NIF API functions: <c>enif_make_atom_len</c>,
<c>enif_make_existing_atom_len</c>,
<c>enif_make_string_len</c>, <c>enif_get_atom_length</c>,
<c>enif_get_list_length</c>, <c>enif_is_list</c>,
<c>enif_is_tuple</c> (by Tuncer Ayaz)</p>
<p>
Own Id: OTP-8640</p>
</item>
<item>
<p>
Support for using gcc's built-in functions for atomic
memory access has been added. This functionallity will be
used if available and no other native atomic
implementation in ERTS is available.</p>
<p>
Own Id: OTP-8659</p>
</item>
<item>
<p>
The number of spinlocks used when implementing atomic
fall-backs when no native atomic implementation is
available has been increased from 16 to 1024.</p>
<p>
Own Id: OTP-8660</p>
</item>
<item>
<p>
Writer preferred pthread read/write locks has been
enabled on Linux.</p>
<p>
Own Id: OTP-8661</p>
</item>
<item>
<p>
The runtime system will by default bind schedulers to
logical processors using the <c>default_bind</c> bind
type if the amount of schedulers are at least equal to
the amount of logical processors configured, binding of
schedulers is supported, and a CPU topology is available
at startup. </p>
<p>
<em>NOTE:</em> If the Erlang runtime system is the only
operating system process that binds threads to logical
processors, this improves the performance of the runtime
system. However, if other operating system processes (as
for example another Erlang runtime system) also bind
threads to logical processors, there might be a
performance penalty instead. If this is the case you, are
are advised to unbind the schedulers using the <seealso
marker="erl#+sbt">+sbtu</seealso> command line argument,
or by invoking <seealso
marker="erlang#system_flag_scheduler_bind_type">erlang:system_flag(scheduler_bind_type,
unbound)</seealso>.</p>
<p>
Own Id: OTP-8666</p>
</item>
<item>
<p>
The recently added BIFs erlang:min/2, erlang:max/2 and
erlang:port_command/3 are now auto-imported (as they were
originally intended to be). Due to the recent compiler
change (OTP-8579), the only impact on old code defining
it's own min/2, max/2 or port_command/3 functions will be
a warning, the local functions will still be used. The
warning can be removed by using
-compile({no_auto_import,[min/2,max/2,port_command/3]}).
in the source file.</p>
<p>
*** POTENTIAL INCOMPATIBILITY ***</p>
<p>
Own Id: OTP-8669 Aux Id: OTP-8579 </p>
</item>
<item>
<p>
There is a new option 'exclusive' to file:open/2 that
uses the OS O_EXCL flag where supported to open the file
in exclusive mode.</p>
<p>
Own Id: OTP-8670</p>
</item>
<item>
<p>
Now, binary_to_term/2 is auto-imported. This will cause a
compile warning if and only if a module has got a local
function with that name.</p>
<p>
*** POTENTIAL INCOMPATIBILITY ***</p>
<p>
Own Id: OTP-8671</p>
</item>
<item>
<p>
Alignment of scheduler data and run queues were adjusted.</p>
<p>
Own Id: OTP-8673</p>
</item>
<item>
<p>Call time breakpoint tracing</p> <list><item>Introduce
a <c>call_time</c> option to
<c>erlang:trace_pattern/3</c>.This option enables call
time breakpoint tracing on code that is executed by
processes with call tracing enabled. Call time tracing
stores the number of calls and the time spent of each
function with this trace pattern enabled. The information
can be retrieved with <c>erlang:trace_info/2</c></item>
<item>Add a scheduler array for BpData. To solve the
issue of multiple schedulers constantly updating the head
pointer to the bp data wheel, each scheduler now has its
own entrypoint to the wheel. This head pointer can be
updated without a locking being taken.</item></list>
<p>Teach call count tracing to use atomics</p>
<list><item>Call count previously used a global lock for
accessing and writing its counter in the breakpoint. This
is now changed to atomics instead.</item> <item>The
change will let call count tracing and cprof to scale
better when increasing the number of
schedulers.</item></list>
<p>
Own Id: OTP-8677</p>
</item>
<item>
<p><c>eprof</c> has been reimplemented with support in
the Erlang virtual machine and is now both faster (i.e.
slows down the code being measured less) and scales much
better. In measurements we saw speed-ups compared to the
old eprof ranging from 6 times (for sequential code that
only uses one scheduler/core) up to 84 times (for
parallel code that uses 8 cores).</p>
<p>Note: The API for the <c>eprof</c> has been cleaned up
and extended. See the documentation.</p>
<p>
*** POTENTIAL INCOMPATIBILITY ***</p>
<p>
Own Id: OTP-8706</p>
</item>
</list>
</section>
</section>
<section><title>Erts 5.7.5.2</title>
<section><title>Known Bugs and Problems</title>
<list>
<item>
<p>
Two bugs in gen_sctp has been corrected: getopts/setopts
hence also send could only be called from socket owner,
and options 'linger', 'rcvbuf' and 'sndbuf' was read from
wrong protocol layer hence read wrong values by getopts.</p>
<p>
Own Id: OTP-9544</p>
</item>
</list>
</section>
</section>
<section><title>Erts 5.7.5.1</title>
<section><title>Fixed Bugs and Malfunctions</title>
<list>
<item>
<p>
Driver threads, such as async threads, using <seealso
marker="erl_driver#ErlDrvPDL">port data locks</seealso>
peeked at the port status field without proper locking
when looking up the driver queue.</p>
<p>
Own Id: OTP-8475</p>
</item>
<item>
<p>
A call to the BIF <c>unregister(RegName)</c> when a port
had the name <c>RegName</c> registered in the runtime
system without SMP support caused a runtime system crash.
(Thanks to Per Hedeland for the bugfix and test case.)</p>
<p>
Own Id: OTP-8487</p>
</item>
<item>
<p>
Fix memory management bug causing crash of non-SMP
emulator with async threads enabled. The bug did first
appear in R13B03.</p>
<p>
Own Id: OTP-8591 Aux Id: seq11554 </p>
</item>
</list>
</section>
</section>
<section><title>Erts 5.7.5</title>
<section><title>Fixed Bugs and Malfunctions</title>
<list>
<item>
<p>
Fix <c>binary_to_term</c> crash on compressed term with
corrupt size field.</p>
<p>
Own Id: OTP-8336</p>
</item>
<item>
<p>
Processes and/or ports could get stuck on a blocked
scheduler when <c>erlang:system_flag(multi_scheduling,
block)</c> was used.</p>
<p>
Processes and/or ports could get stuck on an offline
scheduler when schedulers online were reduced using
<c>erlang:system_flag(schedulers_online,
SchedulersOnline)</c>.</p>
<p>
Own Id: OTP-8342</p>
</item>
<item>
<p>Building on Windows will now work if the paths to
<c>mc.exe</c> and <c>rc.exe</c> contain spaces. The
README.win32 file has been updated with some information
about building using Visual Studio 2008. (Thanks to
Andrew Thompson.)</p>
<p>
Own Id: OTP-8345</p>
</item>
<item>
<p>
EPMD now correctly handles the extra data field which can
be given in the ALIVE2_REQ request and retrieved in the
PORT2_RESP response. (Thanks to Klas Johansson.)</p>
<p>
Own Id: OTP-8361</p>
</item>
<item>
<p>
The configure test for reliable floating point exceptions
has been update to work on modern versions of Mac OS X.
(Thanks to Trannie Carter.)</p>
<p>
Own Id: OTP-8368</p>
</item>
<item>
<p>
ERTS makefiles used to detect the use of a gcc C compiler
by checking if CC equaled gcc. That is, the makefiles
failed to detect gcc C compilers with other command line
names than gcc. `configure' now substitute GCC into the
makefiles. If CC is a gcc C compiler, GCC will have the
value yes. (Thanks to Jean-Sébastien Pédron)</p>
<p>
Own Id: OTP-8373</p>
</item>
<item>
<p>
ETS bug causing the <c>memory</c> counter from
<c>ets:info</c> for ordered_set's to sometimes get out of
synch and absurdly high.</p>
<p>
Own Id: OTP-8377 Aux Id: seq11442 </p>
</item>
<item>
<p>
Immediately repeated multi-scheduling block/unblock
cycles using <c>erlang:system_flag(multi_scheduling,
block | unblock)</c> could deadlock the runtime system.</p>
<p>
Own Id: OTP-8386</p>
</item>
<item>
<p>A number of bugs concerning re and unicode are
corrected:</p>
<p>re:compile no longer loses unicode option, which also
fixes bug in re:split.</p>
<p>re:replace now handles unicode charlist replacement
argument</p>
<p>re:replace now handles unicode RE charlist argument
correctly</p>
<p>re:replace now handles binary unicode output correctly
when nothing is replaced.</p>
<p>Most code, testcases and error isolation done by Rory
Byrne.</p>
<p>
Own Id: OTP-8394</p>
</item>
<item>
<p>
The loading of native code was not properly atomic in the
SMP emulator, which could cause crashes. Also a per-MFA
information table for the native code has now been
protected with a lock since it turns that it could be
accessed concurrently in the SMP emulator. (Thanks to
Mikael Pettersson.)</p>
<p>
Own Id: OTP-8397</p>
</item>
<item>
<p>
Fix processes in exiting status that are about to be
scheduled, to not be allowed to garbage collect.</p>
<p>
Own Id: OTP-8420</p>
</item>
<item>
<p>Removed bogus "\011" character sequence in
documentation.</p>
<p>
Own Id: OTP-8422</p>
</item>
<item>
<p>
The resolver routines failed to look up the own node name
as hostname, if the OS native resolver was erroneously
configured, bug reported by Yogish Baliga, now fixed.</p>
<p>
The resolver routines now tries to parse the hostname as
an IP string as most OS resolvers do, unless the native
resolver is used.</p>
<p>
The DNS resolver inet_res and file resolver inet_hosts
now do not read OS configuration files until they are
needed. Since the native resolver is default, in most
cases they are never needed.</p>
<p>
The DNS resolver's automatic updating of OS configuration
file data (/etc/resolv.conf) now uses the 'domain'
keyword as default search domain if there is no 'search'
keyword.</p>
<p>
Own Id: OTP-8426 Aux Id: OTP-8381 </p>
</item>
<item>
<p>
The re module: A regular expression with an option change
at the start of a pattern that had top-level alternatives
could cause overwriting and/or a crash. (Thanks to
Michael Santos.)</p>
<p>
Own Id: OTP-8438</p>
</item>
<item>
<p>
Harmless buffer overflow by one byte in asn1 and
ram_file_drv.</p>
<p>
Own Id: OTP-8451</p>
</item>
</list>
</section>
<section><title>Improvements and New Features</title>
<list>
<item>
<p>
Improved GC performance after BIF/NIF call when a lot of
heap fragments was created. This will mainly benefit NIFs
that return large compound terms.</p>
<p>
Own Id: OTP-8240</p>
</item>
<item>
<p>Incompatible changes in the experimental NIF
feature.</p> <list><item> Changed the NIF function
prototypes in order to allow more than 3 function
arguments. </item><item> <c>enif_get_data</c> renamed as
<c>enif_priv_data</c>. </item><item>
<c>enif_make_string</c> got a third argument for
character encoding. </item><item> The return value of
<c>erlang:load_nif/2</c> on error changed. </item></list>
<p>Read more in the documentation of <c>erl_nif</c> and
<c>erlang:load_nif/2</c></p>.
<p>
*** POTENTIAL INCOMPATIBILITY ***</p>
<p>
Own Id: OTP-8304</p>
</item>
<item>
<p>Cross compilation improvements and other build system
improvements.</p>
<p>Most notable:</p> <list><item> Lots of cross
compilation improvements. The old cross compilation
support was more or less non-existing as well as broken.
Please, note that the cross compilation support should
still be considered as experimental. Also note that old
cross compilation configurations cannot be used without
modifications. For more information on cross compiling
Erlang/OTP see the <c>$ERL_TOP/INSTALL-CROSS.md</c> file.
</item><item> Support for staged install using <url
href="http://www.gnu.org/prep/standards/html_node/DESTDIR.html">DESTDIR</url>.
The old broken <c>INSTALL_PREFIX</c> has also been fixed.
For more information see the <c>$ERL_TOP/INSTALL.md</c>
file. </item><item> Documentation of the <c>release</c>
target of the top <c>Makefile</c>. For more information
see the <c>$ERL_TOP/INSTALL.md</c> file. </item><item>
<c>make install</c> now by default creates relative
symbolic links instead of absolute ones. For more
information see the <c>$ERL_TOP/INSTALL.md</c> file.
</item><item> <c>$ERL_TOP/configure --help=recursive</c>
now works and prints help for all applications with
<c>configure</c> scripts. </item><item> Doing <c>make
install</c>, or <c>make release</c> directly after
<c>make all</c> no longer triggers miscellaneous
rebuilds. </item><item> Existing bootstrap system is now
used when doing <c>make install</c>, or <c>make
release</c> without a preceding <c>make all</c>.
</item><item> The <c>crypto</c> and <c>ssl</c>
applications use the same runtime library path when
dynamically linking against <c>libssl.so</c> and
<c>libcrypto.so</c>. The runtime library search path has
also been extended. </item><item> The <c>configure</c>
scripts of <c>erl_interface</c> and <c>odbc</c> now
search for thread libraries and thread library quirks the
same way as <c>erts</c> do. </item><item> The
<c>configure</c> script of the <c>odbc</c> application
now also looks for odbc libraries in <c>lib64</c> and
<c>lib/64</c> directories when building on a 64-bit
system. </item><item> The <c>config.h.in</c> file in the
<c>erl_interface</c> application is now automatically
generated in instead of statically updated which reduces
the risk of <c>configure</c> tests without any effect.
</item></list>
<p>(Thanks to Henrik Riomar for suggestions and
testing)</p>
<p>(Thanks to Winston Smith for the AVR32-Linux cross
configuration and testing)</p>
<p>
*** POTENTIAL INCOMPATIBILITY ***</p>
<p>
Own Id: OTP-8323</p>
</item>
<item>
<p>NIF improvements:</p> <list><item> Driver API for
multi-threading made available for NIFs. </item><item>
Support for mempory managed (garbage collected) resource
objects. A way to pass "pointers" to native data
structures between C and Erlang in a safe way.
</item><item> Support for references, floats and term
comparison. </item><item> Various new functions, like
<c>enif_inspect_iolist_as_binary</c>,
<c>enif_make_sub_binary</c>, <c>enif_get_string</c>,
<c>enif_get_atom</c>, <c>enif_make_tuple_from_array</c>,
<c>enif_make_list_from_array</c>,
<c>enif_make_existing_atom</c>. </item></list>
<p>
Own Id: OTP-8335</p>
</item>
<item>
<p>
Minor alignment adjustments of scheduler specific data.</p>
<p>
Own Id: OTP-8341</p>
</item>
<item>
<p>The documentation is now possible to build in an open
source environment after a number of bugs are fixed and
some features are added in the documentation build
process. </p>
<p>- The arity calculation is updated.</p>
<p>- The module prefix used in the function names for
bif's are removed in the generated links so the links
will look like
"http://www.erlang.org/doc/man/erlang.html#append_element-2"
instead of
"http://www.erlang.org/doc/man/erlang.html#erlang:append_element-2".</p>
<p>- Enhanced the menu positioning in the html
documentation when a new page is loaded.</p>
<p>- A number of corrections in the generation of man
pages (thanks to Sergei Golovan)</p>
<p>- The legal notice is taken from the xml book file so
OTP's build process can be used for non OTP
applications.</p>
<p>
Own Id: OTP-8343</p>
</item>
<item>
<p>
There is new <c>erlang:binary_to_term/2</c> BIF that
takes an option list. The option <c>safe</c> can be used
to prevent creation of resources that are not garbage
collected (such as atoms). (Thanks to Jayson Vantuyl.)</p>
<p>
Own Id: OTP-8367</p>
</item>
<item>
<p>
The default settings for garbage collection of binaries
has been adjusted to be less aggressive than in R13B03.
It is now also possible configure the settings for binary
GC. See the documentation for <c>spawn_opt/2-5</c>,
<c>erlang:system_info/1</c>, <c>erlang:system_flag/2</c>,
<c>process_flag/2-3</c>, <c>erlang:trace/3</c>, and the
documenation for <c>erl</c> for the new command line
options <c>+hms</c> and <c>+hmbs</c>.</p>
<p>
Own Id: OTP-8370</p>
</item>
<item>
<p>
A bug causing memory corruption in re:run() has been
corrected. (Thanks to Yamashina Hio.)</p>
<p>
Own Id: OTP-8375</p>
</item>
<item>
<p>
The <c>-Werror</c> option for <c>erlc</c> and the
compiler option <c>warnings_as_errors</c> will cause
warnings to be treated as errors. (Thanks to Christopher
Faulet.)</p>
<p>
Own Id: OTP-8382</p>
</item>
<item>
<p>
Explicit top directories in archive files are now
optional.</p>
<p>
For example, if an archive (app-vsn.ez) just contains an
app-vsn/ebin/mod.beam file, the file info for the app-vsn
and app-vsn/ebin directories are faked using the file
info from the archive file as origin. The virtual
direcories can also be listed. For short, the top
directories are virtual if they does not exist.</p>
<p>
Own Id: OTP-8387</p>
</item>
<item>
<p>
An unnecessary lock operation in os:timestamp/0 has been
eliminated, making it slightly more efficient. (Thanks to
Jonas Falkevik and Tuncer Ayaz.)</p>
<p>
Own Id: OTP-8390</p>
</item>
<item>
<p>
There is a new <c>+t</c> emulator option for changing the
maximum number of atoms. (Thanks to Julien Barbot.)</p>
<p>
Own Id: OTP-8405</p>
</item>
<item>
<p>
Fixed numerous compiler warnings generated by gcc 4.4.1
and tile-cc 2.0.1.78377 when compiling the runtime
system.</p>
<p>
Own Id: OTP-8412</p>
</item>
<item>
<p>
<c>configure</c> learned the option
<c>--enable-m32-build</c> to force the building of a
32-bit run-time on systems where the default C compiler
generates 64-bit executables by default.</p>
<p>
Own Id: OTP-8415</p>
</item>
<item>
<p>
HiPE now works in the 64-bit emulator on Mac OS X.
(Thanks to Geoff Cant.)</p>
<p>
Own Id: OTP-8416</p>
</item>
<item>
<p>
Improved handling of symbolic links to escripts</p>
<p>
Own Id: OTP-8417</p>
</item>
<item>