aboutsummaryrefslogtreecommitdiffstats
path: root/erts/doc/src/notes.xml
diff options
context:
space:
mode:
authorErlang/OTP <[email protected]>2009-11-20 14:54:40 +0000
committerErlang/OTP <[email protected]>2009-11-20 14:54:40 +0000
commit84adefa331c4159d432d22840663c38f155cd4c1 (patch)
treebff9a9c66adda4df2106dfd0e5c053ab182a12bd /erts/doc/src/notes.xml
downloadotp-84adefa331c4159d432d22840663c38f155cd4c1.tar.gz
otp-84adefa331c4159d432d22840663c38f155cd4c1.tar.bz2
otp-84adefa331c4159d432d22840663c38f155cd4c1.zip
The R13B03 release.OTP_R13B03
Diffstat (limited to 'erts/doc/src/notes.xml')
-rw-r--r--erts/doc/src/notes.xml5439
1 files changed, 5439 insertions, 0 deletions
diff --git a/erts/doc/src/notes.xml b/erts/doc/src/notes.xml
new file mode 100644
index 0000000000..2252358e0d
--- /dev/null
+++ b/erts/doc/src/notes.xml
@@ -0,0 +1,5439 @@
+<?xml version="1.0" encoding="latin1" ?>
+<!DOCTYPE chapter SYSTEM "chapter.dtd">
+
+<chapter>
+ <header>
+ <copyright>
+ <year>2004</year><year>2009</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.7.4</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ An insufficient stack allocation was made when reading
+ CPU information on BSD operating systems. (Thanks Michael
+ Turner and Akira Kitada)</p>
+ <p>
+ Own Id: OTP-8207</p>
+ </item>
+ <item>
+ <p>
+ A bug when supplying an argument without a dash directly
+ after the program name when starting erlang could prevent
+ distribution to start. This is now corrected.</p>
+ <p>
+ Own Id: OTP-8209</p>
+ </item>
+ <item>
+ <p>
+ A ticker process could potentially be blocked
+ indefinitely trying to send a tick to a node not
+ responding. If this happened, the connection would not be
+ brought down as it should.</p>
+ <p>
+ Own Id: OTP-8218</p>
+ </item>
+ <item>
+ <p>
+ Using certain firewalls (i.e. MS IAS Client and certain
+ versions of COMODO) could expose an undocumented
+ behaviour in the Win32 socket interface causing the name
+ resolution calls to hang infinitely. This is now worked
+ around by adding possibilities for port programs under
+ Windows to use overlapped I/O on their standard
+ input/output file handles.</p>
+ <p>
+ Own Id: OTP-8230</p>
+ </item>
+ <item>
+ <p>
+ Fixed bug on ETS tables with <c>write_concurrency</c>.
+ The emulator could crash when doing a <c>select</c> or
+ <c>match</c> with a bound key without finding any object.</p>
+ <p>
+ Own Id: OTP-8242</p>
+ </item>
+ <item>
+ <p>The <c>information-request</c> /
+ <c>information-response</c>, and
+ <c>group-leader-change-request</c> /
+ <c>group-leader-changed-response</c> signal pairs
+ described below did not always adhere to the signal order
+ guarantees of Erlang's signal model in the runtime system
+ with SMP support. These signals could for example
+ sometimes pass exit signals.</p>
+ <p>The following BIFs behaviors can be modeled as if an
+ asynchronous <c>information-request</c> signal is sent to
+ <c>Pid</c>. If <c>Pid</c> is alive, it responds with an
+ asynchronous <c>information-response</c> signal;
+ otherwise, the runtime system responds with a
+ <c>no-such-process</c> signal. When the response is
+ received, the caller transforms it into the result of the
+ BIF.</p> <list> <item><c>is_process_alive(Pid)</c></item>
+ <item><c>erlang:process_display(Pid, Type)</c></item>
+ <item><c>process_info(Pid)</c></item>
+ <item><c>process_info(Pid, ItemSpec)</c></item> </list>
+ <p>When <c>Pid</c> resides on the same node as the caller
+ of <c>group_leader(GroupLeader, Pid)</c>, the
+ <c>group_leader/2</c> BIFs behavior can be modeled as if
+ an asynchronous <c>group-leader-change-request</c> signal
+ is sent to <c>Pid</c>. If <c>Pid</c> is alive, it
+ responds with an asynchronous
+ <c>group-leader-changed-response</c> signal; otherwise,
+ the runtime system responds with a <c>no-such-process</c>
+ signal. When the response is received, the caller
+ transforms it into the result of the BIF. The distributed
+ case which only consists of an asynchronous
+ <c>group-leader-change-request</c> signal and no response
+ is not effected.</p>
+ <p>
+ Own Id: OTP-8245</p>
+ </item>
+ <item>
+ <p>
+ Errors in the <c>system_profile</c> documentation has
+ been corrected.</p>
+ <p>
+ Own Id: OTP-8257</p>
+ </item>
+ <item>
+ <p>
+ Low watermark socket option modified high watermark
+ instead of low watermark in the inet_driver. (Thanks to
+ Feng Yu and Tuncer Ayaz)</p>
+ <p>
+ Own Id: OTP-8279</p>
+ </item>
+ <item>
+ <p>
+ A race condition could cause the runtime system with SMP
+ support to end up in a completely unresponsive state.</p>
+ <p>
+ Own Id: OTP-8297</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ The use of <c>pthread_cond_timedwait()</c> have been
+ completely removed from the runtime system. This since
+ its behavior is unpredictable when the system clock is
+ suddenly changed. The previous use of it was harmless.</p>
+ <p>
+ Own Id: OTP-8193</p>
+ </item>
+ <item>
+ <p>
+ The documentation is now built with open source tools
+ (xsltproc and fop) that exists on most platforms. One
+ visible change is that the frames are removed.</p>
+ <p>
+ Own Id: OTP-8201</p>
+ </item>
+ <item>
+ <p>
+ A new garbage collecting strategy for binaries which is
+ more aggressive than the previous implementation.
+ Binaries now has a virtual binary heap tied to each
+ process. When binaries are created or received to a
+ process it will check if the heap limit has been reached
+ and if a reclaim should be done. This imitates the
+ behavior of ordinary Erlang terms. The virtual heaps are
+ grown and shrunk like ordinary heaps. This will lessen
+ the memory footprint of binaries in a system.</p>
+ <p>
+ Own Id: OTP-8202</p>
+ </item>
+ <item>
+ <p>
+ The <c>ErlDrvTermData</c> term types used by
+ <c>driver_output_term()</c> and <c>driver_send_term()</c>
+ have been extended with the term types
+ <c>ERL_DRV_INT64</c>, and <c>ERL_DRV_UINT64</c> for
+ passing 64-bit integers. Also the 64-bit integer data
+ types <c>ErlDrvSInt64</c> and <c>ErlDrvUInt64</c> have
+ been introduced.</p>
+ <p>
+ For more information see the <seealso
+ marker="erl_driver">erl_driver(3)</seealso>
+ documentation.</p>
+ <p>
+ Own Id: OTP-8205</p>
+ </item>
+ <item>
+ <p>
+ [escript] The restriction that the first line in escripts
+ must begin with <c>#!</c> has been removed.</p>
+ <p>
+ [escript] Some command line options to the escript
+ executable has now been documented. For example you can
+ run an escript in the debugger by just adding a command
+ line option.</p>
+ <p>
+ [escript] The documentation of the escript header syntax
+ has been clarified. For example the header is optional.
+ This means that it is possible to directly "execute"
+ <c>.erl</c>, <c>.beam</c> and<c>.zip</c> files.</p>
+ <p>
+ Own Id: OTP-8215</p>
+ </item>
+ <item>
+ <p>
+ The instruction for building OTP on Windows was outdated
+ and incomplete, the document is updated.</p>
+ <p>
+ Also the otp_build script required windows drives to show
+ up in Cygwin using the /cygdrive prefix. That requirement
+ is now removed.</p>
+ <p>
+ Own Id: OTP-8219</p>
+ </item>
+ <item>
+ <p>
+ A module can have native implemented functions (NIFs)
+ that are dynamically loaded by calling
+ <c>erlang:load_nif/2</c>. This is an experimental feature
+ that is not yet intended for production systems. It is
+ released with intention to get some early feedback on the
+ interfaces before they are carved in stone.</p>
+ <p>
+ Own Id: OTP-8220</p>
+ </item>
+ <item>
+ <p>
+ The <c>float/1</c> BIF would always force a garbage
+ collection. The BIFs <c>size/1</c>, <c>byte_size/1</c>,
+ <c>bit_size/1</c>, <c>abs/1</c>, and <c>round/1</c> would
+ force a garbage-collection if the result was not a
+ sufficiently small integer.</p>
+ <p>
+ Own Id: OTP-8221</p>
+ </item>
+ <item>
+ <p>
+ The <seealso
+ marker="erlang#erlang:port_command/3">erlang:port_command/3</seealso>
+ BIF has been added. <c>erlang:port_command/3</c> is
+ currently not auto imported, but it is planned to be auto
+ imported in OTP R14. For more information see the
+ <seealso marker="erlang">erlang(3)</seealso>
+ documentation.</p>
+ <p>
+ Own Id: OTP-8225</p>
+ </item>
+ <item>
+ <p>
+ '<c>configure --enable-darwin-64bit</c>' would fail if
+ Snow Leopard had been booted with the 64-bit kernel.
+ (Thanks to Ryan M. Graham.)</p>
+ <p>
+ Own Id: OTP-8236</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 5.7.3</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ On Windows, open_port({spawn,Command},Opts) could not run
+ executables with spaces in the path or filename,
+ regardless of quoting efforts. While
+ open_port({spawn_executable,Exec},Opts) can run any
+ executable, it was still impossible to use 'spawn' to do
+ the same thing. This is now corrected.</p>
+ <p>
+ Own Id: OTP-8055</p>
+ </item>
+ <item>
+ <p>
+ The scheduler bind type <c>processor_spread</c> spread
+ schedulers too much on large NUMA systems.</p>
+ <p>
+ The new scheduler bind type <c>spread</c> spreads
+ schedulers as much as possible, and behaves as
+ <c>processor_spread</c> previously did. For more
+ information see the documentation of the <c>+sbt</c>
+ command line argument in the <c>erl(1)</c> documentation,
+ and the documentation of
+ <c>erlang:system_flag(scheduler_bind_type,
+ SchedulerBindType)</c>.</p>
+ <p>
+ Own Id: OTP-8063</p>
+ </item>
+ <item>
+ <p>
+ Automatically detected CPU topology on Linux system could
+ erroneously contain logical processors with <c>-1</c> as
+ identifiers. This happened when
+ <c>sysconf(_SC_NPROCESSORS_CONF)</c> returned a value
+ larger than the amount of logical processors found.</p>
+ <p>
+ Own Id: OTP-8064</p>
+ </item>
+ <item>
+ <p>
+ When the minimal term [] (end of list) was sent as the
+ complete message to a process on another node, and
+ received there, it could not be decoded. This bug is now
+ corrected. Fortunately [] is uncommon as the complete
+ message in real applications but it is a serious bug
+ anyway.</p>
+ <p>
+ Own Id: OTP-8092</p>
+ </item>
+ <item>
+ <p>A bug when the floating point exception pointer was
+ not initialized has been corrected. It manifested itself
+ on CentOS 5.1 sometimes when a floating point value was
+ sent to a remote node. Bug reported and patch suggested
+ by David Reiss, confirmed by Mikael Pettersson.</p>
+ <p>Some build problems on IRIX was also corrected.
+ Problem reported by Patrick Baggett, patch by Mikael
+ Pettersson.</p>
+ <p>
+ Own Id: OTP-8095</p>
+ </item>
+ <item>
+ <p>
+ A terminating process could erroneously unregister a name
+ for another process. This could occur under the following
+ conditions: The name of the terminating process was
+ unregistered and then registered for another process
+ simultaneously as the process that first had the name was
+ terminating.</p>
+ <p>
+ Own Id: OTP-8099 Aux Id: seq11344 </p>
+ </item>
+ <item>
+ <p>
+ Running erlc in a very deep directory (with a path length
+ of more 256 or more characters) would cause the emulator
+ to crash in a call to <c>list_to_atom/1</c>. (Thanks to
+ Chris Newcombe.)</p>
+ <p>
+ Own Id: OTP-8124</p>
+ </item>
+ <item>
+ <p>
+ A deadlock of the runtime system could occur when
+ unregistering the name of a port.</p>
+ <p>
+ Own Id: OTP-8145</p>
+ </item>
+ <item>
+ <p>
+ <c>Makefile.in</c> has been updated to use the LDFLAGS
+ environment variable (if set). (Thanks to Davide
+ Pesavento.)</p>
+ <p>
+ Own Id: OTP-8157</p>
+ </item>
+ <item>
+ <p>
+ The pthread rwlock implemention on Linux could cause
+ starvation of writers. We, therefore, now use our own
+ rwlock implementation on Linux.</p>
+ <p>
+ Own Id: OTP-8158</p>
+ </item>
+ <item>
+ <p>
+ Open source Erlang builds are updated to work well on
+ Snow Leopard (MacOS X 10.6)</p>
+ <p>
+ Own Id: OTP-8168</p>
+ </item>
+ <item>
+ <p>
+ A call to <c>erlang:system_info(schedulers_online)</c>
+ could end up in an infinite loop. This happened if the
+ amount of schedulers was larger than one, the amount of
+ schedulers online was one, and someone was blocking
+ multi-scheduling.</p>
+ <p>
+ Own Id: OTP-8169</p>
+ </item>
+ <item>
+ <p>
+ An error in erlang:system_profile/2 could cause
+ timestamped messages to arrive out of order in the SMP
+ case. This has now been fixed.</p>
+ <p>
+ Own Id: OTP-8171</p>
+ </item>
+ <item>
+ <p>
+ <c>binary_to_atom/2</c> and
+ <c>binary_to_existing_atom/2</c> would leak memory if the
+ binary contained unaligned data.</p>
+ <p>
+ Own Id: OTP-8192</p>
+ </item>
+ <item>
+ <p>
+ The async thread pool in the runtime system without SMP
+ support used a memory allocator that was not thread safe
+ for async jobs.</p>
+ <p>
+ Own Id: OTP-8194</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Processor internal NUMA nodes are now supported in the
+ ERTS internal CPU topology representation. For more
+ information see the documentation of the <c>+sct</c>
+ command line argument in the <c>erl(1)</c> documentation,
+ and the documentation of
+ <c>erlang:system_info(cpu_topology)</c>.</p>
+ <p>
+ Own Id: OTP-8041</p>
+ </item>
+ <item>
+ <p>
+ Documentation for ets improved about concurrency.</p>
+ <p>
+ Own Id: OTP-8050</p>
+ </item>
+ <item>
+ <p>
+ Emulator flags in an escript were earlier inherited to
+ emulators started from from the emulator running the
+ escript. For example when an escript invoked
+ <c>os:cmd("erl")</c>, the new emulator were given
+ erroneous emulator flags. This bug has now been fixed</p>
+ <p>
+ Escript filenames may now contain dots.</p>
+ <p>
+ Own Id: OTP-8060</p>
+ </item>
+ <item>
+ <p>
+ Made some BIFs non-recursive (relational operators,hash
+ and phash) to limit internal stack usage.</p>
+ <p>
+ Own Id: OTP-8065</p>
+ </item>
+ <item>
+ <p>
+ Fixed Windows specific bug in erl_prim_loader. Now it
+ handles the root directory (e.g. c:/) better. This bug
+ affected the directory listing in the debugger.</p>
+ <p>
+ Own Id: OTP-8080</p>
+ </item>
+ <item>
+ <p>
+ A TCP socket with option <c>{packet,4}</c> could crash
+ the emulator if it received a packet header with a very
+ large size value (>2Gb). The same bug caused
+ <c>erlang:decode_packet/3</c> to return faulty values.
+ (Thanks to Georgos Seganos.)</p>
+ <p>
+ Own Id: OTP-8102</p>
+ </item>
+ <item>
+ <p>
+ The maximum size of the export table has been raised from
+ 65536 to 524288 entries.</p>
+ <p>
+ Own Id: OTP-8104 Aux Id: seq11345 </p>
+ </item>
+ <item>
+ <p>
+ The file module has now a read_line/1 function similar to
+ the io:get_line/2, but with byte oriented semantics. The
+ function file:read_line/1 works for raw files as well,
+ but for good performance it is recommended to use it
+ together with the 'read_ahead' option for raw file
+ access.</p>
+ <p>
+ Own Id: OTP-8108</p>
+ </item>
+ <item>
+ <p>
+ Fixed bug causing emulator crash when reading a term in
+ external format containing a corrupt list with a negative
+ length.</p>
+ <p>
+ Own Id: OTP-8117</p>
+ </item>
+ <item>
+ <p>
+ New emulator flag <c>+sss</c>, to set stack size of
+ scheduler threads.</p>
+ <p>
+ Own Id: OTP-8119</p>
+ </item>
+ <item>
+ <p>
+ The Windows utility Erlsrv, run in interactive mode now
+ accepts options for registering internal service name and
+ description field of Windows registry database.</p>
+ <p>
+ Own Id: OTP-8132</p>
+ </item>
+ <item>
+ <p>
+ <c>erlang:demonitor(Mon, [flush])</c> has been optimized.
+ Previously it always searched the message queue of the
+ caller for a <c>'DOWN'</c> message. Current
+ implementation only search the message queue when
+ necessary. It is quite common that the search is not
+ necessary.</p>
+ <p>
+ A new option <c>info</c> has been added to
+ <c>erlang:demonitor/2</c>. For more information see the
+ <c>erlang(3)</c> documentation.</p>
+ <p>
+ Own Id: OTP-8143</p>
+ </item>
+ <item>
+ <p>
+ I/O tasks could unnecessarily be rescheduled. This was
+ harmless, but not useful work.</p>
+ <p>
+ Own Id: OTP-8148</p>
+ </item>
+ <item>
+ <p>
+ Minor improvements of <c>erlang:memory/[1,2]</c>.</p>
+ <p>
+ Own Id: OTP-8152</p>
+ </item>
+ <item>
+ <p>
+ New configuration option to enable use of shared zlib.</p>
+ <p>
+ Own Id: OTP-8155</p>
+ </item>
+ <item>
+ <p>
+ Fixed smp bug in ETS that could cause emulator crash when
+ table with more than 1000 objects accessed by several
+ processes, including calls to variants of <c>select</c>
+ or <c>match</c> combined with concurrent object deletion.</p>
+ <p>
+ Own Id: OTP-8166 Aux Id: seq11392 </p>
+ </item>
+ <item>
+ <p>
+ The code path interpretation is now more relaxed. The
+ flag -code_path_choice now defaults to relaxed instead of
+ strict. See the documentation of code and init for more
+ info.</p>
+ <p>
+ Own Id: OTP-8170</p>
+ </item>
+ <item>
+ <p>
+ Load balancing of run queues and check for I/O are
+ triggered more often than before in situations where
+ processes are scheduled often but are doing very little
+ work each time they execute.</p>
+ <p>
+ Own Id: OTP-8172</p>
+ </item>
+ <item>
+ <p>
+ Call tracing binary comprehensions would cause an
+ emulator crash. (Thanks to Paul Mineiro.)</p>
+ <p>
+ Own Id: OTP-8179</p>
+ </item>
+ <item>
+ <p>
+ <c>binary_to_term/1</c> would crash the emulator instead
+ of generating a <c>badarg</c> exception when given
+ certain invalid terms. (Thanks to Scott Lystig Fritchie.)</p>
+ <p>
+ Own Id: OTP-8180</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 5.7.2</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Crash dumps should now cause less problems for the
+ crashdump_viewer application. (For processes where arity
+ was non-zero, the arguments are now longer printed - they
+ used to be printed in a format that was not parseable.)</p>
+ <p>
+ Own Id: OTP-7472 Aux Id: seq11019, 11292 </p>
+ </item>
+ <item>
+ <p>
+ Processes could potentially get stuck on an offline
+ scheduler.</p>
+ <p>
+ Own Id: OTP-7990</p>
+ </item>
+ <item>
+ <p>
+ <c>binary_to_atom/2</c> and
+ <c>binary_to_existing_atom/2</c> could leak memory if
+ they caused a <c>badarg</c> exception.</p>
+ <p>
+ Own Id: OTP-7997</p>
+ </item>
+ <item>
+ <p>
+ A process could under very rare circumstances erroneously
+ be resumed.</p>
+ <p>
+ Own Id: OTP-8000</p>
+ </item>
+ <item>
+ <p>
+ Load balancing between schedulers could under rare
+ circumstances cause an emulator crash.</p>
+ <p>
+ Own Id: OTP-8008</p>
+ </item>
+ <item>
+ <p>
+ <c>erlang:memory(processes_used)</c> always returned
+ <c>0</c> instead of the correct value. (Thanks to Geoff
+ Cant)</p>
+ <p>
+ Own Id: OTP-8022</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Major improvements of the Erlang distribution for Erlang
+ runtime systems with SMP support. Previously distribution
+ port locks were heavily contended, and all encoding and
+ decoding for a specific distribution channel had to be
+ done in sequence. Lock contention due to the distribution
+ is now negligible and both encoding and decoding of
+ Erlang messages can be done in parallel.</p>
+ <p>
+ The old atom cache protocol used by the Erlang
+ distribution has been dropped since it effectively
+ prevented all parallel encoding and decoding of messages
+ passed over the same distribution channel.</p>
+ <p>
+ A new atom cache protocol has been introduced which
+ isolates atom cache accesses and makes parallel encoding
+ and decoding of messages passed over the same
+ distribution channel possible. The new atom cache
+ protocol also use an atom cache size 8 times larger than
+ before. The new atom cache protocol is documented in the
+ ERTS users guide.</p>
+ <p>
+ Erlang messages received via the distribution are now
+ decoded by the receiving Erlang processes without holding
+ any distribution channel specific locks. Erlang messages
+ and signals sent over the distribution are as before
+ encoded by the sending Erlang process, but now without
+ holding any distribution channel specific locks during
+ the encoding. That is, both encoding and decoding can be
+ and are done in parallel regardless of distribution
+ channel used.</p>
+ <p>
+ The part that cannot be parallelized is the atom cache
+ updates. Atom cache updates are therefore now scheduled
+ on the distribution port. Since it is only one entity per
+ distribution channel doing this work there is no lock
+ contention due to the atom cache updates.</p>
+ <p>
+ The new runtime system does not understand the old atom
+ cache protocol. New and old runtime systems can however
+ still communicate, but no atom cache will be used.</p>
+ <p>
+ Own Id: OTP-7774</p>
+ </item>
+ <item>
+ <p>
+ Fixed a bug that caused error logging from
+ <c>driver_select</c> sometimes with additional symptoms
+ such as failing IP communications or even an emulator
+ crash.</p>
+ <p>
+ Own Id: OTP-7898 Aux Id: seq11304 </p>
+ </item>
+ <item>
+ <p>
+ Improved SMP concurrency for ETS tables. Several mutating
+ operations can now be performed truly concurrent on
+ different records of the same table. To support this, the
+ table has to be created with option
+ <c>write_concurrency</c>, as it is achieved at the
+ expense of some execution and memory overhead.
+ <c>ets:select</c> and <c>select_count</c> has also been
+ improved for all tables to not acquire exclusive table
+ lock during the iteration.</p>
+ <p>
+ Own Id: OTP-7922</p>
+ </item>
+ <item>
+ <p>
+ erl (that is erl.exe and dyn_erl) and erlexec has been
+ made more dynamic so no hard coded paths needs to added
+ at installation time to erl (that is erl.ini and erl).
+ Reltool will make use of this in a future release.</p>
+ <p>
+ Own Id: OTP-7952</p>
+ </item>
+ <item>
+ <p>
+ Added functionality to get higher resolution timestamp
+ from system. The erlang:now function returns a timestamp
+ that's not always consistent with the actual operating
+ system time (due to resilience against large time changes
+ in the operating system). The function os:timestamp/0 is
+ added to get a similar timestamp as the one being
+ returned by erlang:now, but untouched by Erlangs time
+ correcting and smoothing algorithms. The timestamp
+ returned by os:timestamp is always consistent with the
+ operating systems view of time, like the calendar
+ functions for getting wall clock time, but with higher
+ resolution. Example of usage can be found in the os
+ manual page.</p>
+ <p>
+ Own Id: OTP-7971</p>
+ </item>
+ <item>
+ <p>
+ Two new options are added to open_port - spawn_executable
+ which runs external executables in a controlled way, and
+ spawn_driver which only opens port to loaded Erlang
+ drivers. See the erlang manual page for details.</p>
+ <p>
+ Own Id: OTP-7995</p>
+ </item>
+ <item>
+ <p>
+ New functionality in ETS to transfer the ownership of a
+ table. A table can either change owner be declaring an
+ "heir", another process that will inherit the table if
+ the owner terminates. A table can also change owner by
+ calling a new function <c>ets:give_away</c>.</p>
+ <p>
+ Own Id: OTP-8006</p>
+ </item>
+ <item>
+ <p>
+ Updates to Tilera build environment.</p>
+ <p>
+ Own Id: OTP-8009</p>
+ </item>
+ <item>
+ <p>
+ A stack trace was unnecessarily saved during process
+ termination.</p>
+ <p>
+ Own Id: OTP-8014</p>
+ </item>
+ <item>
+ <p>
+ User defined CPU topology and scheduler bind type can now
+ be set from the command line when starting an emulator.
+ For more information see the documentation of the
+ <c>+sct</c>, and the <c>+sbt</c> emulator flags in the
+ <c>erl(1)</c> documentation.</p>
+ <p>
+ The CPU topologies returned from
+ <c>erlang:system_info/1</c> and
+ <c>erlang:system_flag/2</c> now always contain the
+ <c>processor</c> level, also when not strictly necessary.</p>
+ <p>
+ Own Id: OTP-8030</p>
+ </item>
+ <item>
+ <p>
+ Various fixes in ETS: <c>ets:first</c> could return a
+ deleted key in a fixated table. <c>ets:lookup</c> could
+ return objects out of order if a deleted object was
+ re-inserted into a fixed bag. <c>ets:delete_object</c>
+ could fail to delete duplicate objects in a
+ duplicate_bag.</p>
+ <p>
+ Own Id: OTP-8040</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 5.7.1</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Fixed a bug on Windows that could make
+ <c>gen_tcp:send</c> hang trying to send an iolist of more
+ than 16 binaries.</p>
+ <p>
+ Own Id: OTP-7816</p>
+ </item>
+ <item>
+ <p>
+ The runtime system could under rare circumstances crash
+ during load balancing.</p>
+ <p>
+ Own Id: OTP-7908 Aux Id: otp-7500 </p>
+ </item>
+ <item>
+ <p>
+ <c>run_erl</c> uses fallback if Unix98 pseudo-terminal is
+ not present on host.</p>
+ <p>
+ Own Id: OTP-7916 Aux Id: seq11249 </p>
+ </item>
+ <item>
+ <p>
+ A message buffer memory leak in the runtime system
+ without smp support has been fixed.</p>
+ <p>
+ Own Id: OTP-7941</p>
+ </item>
+ <item>
+ <p>Attempting to append a binary of 16Mb or greater to
+ another binary using the bit syntax would cause a
+ <c>system_limit</c> exception. There was also several
+ cases when constructing binaries when a <c>badarg</c>
+ exception was generated when it should have been
+ <c>system_limit</c>.</p>
+ <p>
+ Own Id: OTP-7942</p>
+ </item>
+ <item>
+ <p>
+ The runtime system with SMP support failed to terminate
+ the caller of <c>link(RemotePid)</c> properly, if
+ <c>RemotePid</c> was the pid of a process on an
+ unreachable node. The calling process was in this case
+ marked as exiting, but never terminated.</p>
+ <p>
+ Own Id: OTP-7946</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Rudimentary support for cross compiling is added to the
+ source release. The support is still in its infancy and
+ has only been used to cross compile on Linux for a
+ different cpu architecture and a different Linux version,
+ but should be extendible to support other platforms as
+ well. The cross configuration files with examples are
+ placed in $ERL_TOP/xcomp/. View README.xcomp and run
+ $ERL_TOP/otp_build -help for further information.</p>
+ <p>
+ Own Id: OTP-7854</p>
+ </item>
+ <item>
+ <p>The escape sequence <c>\{</c> which was given a new
+ interpretation in R13A has retained its old meaning (the
+ ASCII code for <c>{</c>), which means that codes greater
+ than 255 have to be stated using hexadecimal characters
+ (for example, <c>\x{AAA}</c>). The escape sequence
+ <c>\xH</c> where H is a hexadecimal character followed by
+ something else but a hexadecimal character is no longer
+ valid (incompatibility with R13A). Character codes less
+ than 256 can be stated using two hexadecimal characters
+ (for example, <c>\x0D</c>).</p>
+ <p>
+ Own Id: OTP-7891 Aux Id: OTP-7855 </p>
+ </item>
+ <item>
+ <p>The <c>term_to_binary/1</c> BIF used to be implemented
+ with recursive C code, which could cause the Erlang
+ emulator to terminate because of a stack overflow.</p>
+ <p>Also fixed some minor issues in
+ <c>term_to_binary/1</c> and <c>binary_to_term/1</c>
+ pointed out by Matthew Dempsky.</p>
+ <p>
+ Own Id: OTP-7894</p>
+ </item>
+ <item>
+ <p>
+ Several glitches and performance issues in the Unicode
+ and I/O-system implementation of R13A have been
+ corrected.</p>
+ <p>
+ Own Id: OTP-7896 Aux Id: OTP-7648 OTP-7887 </p>
+ </item>
+ <item>
+ <p>
+ Minor documentation improvements of the
+ <c>scheduler_bind_type</c> argument of
+ <c>erlang:system_flag/2</c>, and the
+ <c>scheduler_bind_type</c>, and the
+ <c>scheduler_bindings</c> arguments of
+ <c>erlang:system_info/1</c>.</p>
+ <p>
+ Own Id: OTP-7901 Aux Id: OTP-7777 </p>
+ </item>
+ <item>
+ <p>
+ There is a new BIF <c>erlang:make_tuple/3</c>.</p>
+ <p>
+ Own Id: OTP-7913</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+
+<section><title>Erts 5.7</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p><em>OpenSource:</em></p>
+ <p>FreeBSD leap-seconds are handled according to patch
+ submitted by OpenSource user Kenji Rikitake. No test case
+ covers this functionality (unsupported platform).</p>
+ <p>
+ Own Id: OTP-7609</p>
+ </item>
+ <item>
+ <p>
+ A corrected bug in <c>ets</c> for <c>bag</c> and
+ <c>duplicate_bag</c>. A <c>delete/2</c> or
+ <c>lookup_element/3</c> could miss objects in a fixed
+ table if one or more objects with the same key had
+ already been deleted.</p>
+ <p>
+ Own Id: OTP-7665</p>
+ </item>
+ <item>
+ <p>
+ A new driver call-back <c>stop_select</c> is introduced
+ to allow drivers to de-select and then close a file
+ descriptor in a safe way in a SMP emulator. The old way
+ was not strictly according to posix standard and could in
+ some rare cases lead to unexpected behavior. A new flag
+ <c>ERL_DRV_USE</c> can be passed to
+ <c>driver_select()</c> to tell it that the descriptor
+ should be closed. <c>stop_select</c> is then called when
+ it is safe to do so. Old drivers will however still work
+ as before.</p>
+ <p>
+ Own Id: OTP-7670</p>
+ </item>
+ <item>
+ <p>
+ A bug fixed for TCP sockets with option
+ <c>{packet,http}</c>. An HTTP request with an absolute
+ URI was returned with a corrupt path string. This bug did
+ only exist in R12B-4 and R12B-5.</p>
+ <p>
+ Own Id: OTP-7682 Aux Id: OTP-7647 </p>
+ </item>
+ <item>
+ <p>
+ run_erl did in some cases fail to extract control
+ sequences from to_erl (like: winsize=X,Y) and did instead
+ send them to be interpreted by the erlang shell.</p>
+ <p>
+ Own Id: OTP-7688</p>
+ </item>
+ <item>
+ <p>
+ A bug in the installer on Windows not updating file
+ associations properly is now corrected.</p>
+ <p>
+ Own Id: OTP-7746</p>
+ </item>
+ <item>
+ <p>More space than necessary could be allocated in
+ binaries when appending to a binary (also in a binary
+ comprehension) and the data appended did not consist of
+ wholes bytes (e.g. 13 bits).</p>
+ <p>
+ Own Id: OTP-7747</p>
+ </item>
+ <item>
+ <p>
+ The gen_sctp option sctp_peer_addr_params,
+ #sctp_paddrparams{address={IP,Port} was erroneously
+ decoded in the inet driver. This bug has now been
+ corrected.</p>
+ <p>
+ Own Id: OTP-7755</p>
+ </item>
+ <item>
+ <p>
+ Outstanding async driver jobs leaked memory if the
+ issuing port died before the async jobs completed.</p>
+ <p>
+ Own Id: OTP-7784</p>
+ </item>
+ <item>
+ <p>A bug in the dynamic library loading affecting, among
+ others, OpenSolaris is now corrected. (Thanks to Paul
+ Fisher.)</p>
+ <p>
+ Own Id: OTP-7796</p>
+ </item>
+ <item>
+ <p>
+ run_erl compile errors fixed for FreeBSD</p>
+ <p>
+ Own Id: OTP-7817</p>
+ </item>
+ <item>
+ <p>
+ A bug in the inet driver for SCTP on Solaris showing for
+ e.g gen_sctp:abort/1 and gen_sctp:eof/1 has been
+ corrected. Patch suggestion by Simon Cornish.</p>
+ <p>
+ Own Id: OTP-7866</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ The order of objects visited in select for ordered_set is
+ now documented.</p>
+ <p>
+ Own Id: OTP-7339</p>
+ </item>
+ <item>
+ <p>
+ The runtime system with SMP support now uses multiple,
+ scheduler specific run queues, instead of one globally
+ shared run queue.</p>
+ <p>
+ The lock protecting the shared run queue was heavily
+ contended, and the shared run queue also caused Erlang
+ processes to randomly migrate between schedulers with
+ negative cache effects as a result.</p>
+ <p>
+ With the current scheduler specific run queue solution,
+ lock contention due to run queue protection has been
+ reduced, and Erlang processes are only migrated when
+ needed to balance the load between the schedulers. The
+ reduced amount of migration also reduce lock contention
+ on locks protecting the scheduler specific instances of
+ the erts internal memory allocators.</p>
+ <p>
+ The scheduler specific run queues are also a necessity
+ for a lot of future planned NUMA (Non-Uniform Memory
+ Access) specific optimizations.</p>
+ <p>
+ Own Id: OTP-7500</p>
+ </item>
+ <item>
+ <p>Support for Unicode is implemented as described in
+ EEP10. Formatting and reading of unicode data both from
+ terminals and files is supported by the io and io_lib
+ modules. Files can be opened in modes with automatic
+ translation to and from different unicode formats. The
+ module 'unicode' contains functions for conversion
+ between external and internal unicode formats and the re
+ module has support for unicode data. There is also
+ language syntax for specifying string and character data
+ beyond the ISO-latin-1 range.</p>
+ <p>The interactive shell will support input and output of
+ unicode characters when the terminal and operating system
+ supports it.</p>
+ <p>Please see the EEP and the io/io_lib manual pages as
+ well as the stdlib users guide for details.</p>
+ <p><em>I/O-protocol incompatibilities:</em></p>
+ <p>The io_protocol between io_Server and client is
+ updated to handle protocol data in unicode formats. The
+ updated protocol is now documented. The specification
+ resides in the stdlib <em>users manual</em>, which is a
+ new part of the manual.</p>
+ <p><em>io module incompatibilities:</em></p>
+ <p>The io:put_chars, io:get_chars and io:get_line all
+ handle and return unicode data. In the case where
+ binaries can be provided (as to io:put_chars), they shall
+ be encoded in UTF-8. When binaries are returned (as by
+ io:get_line/get_chars when the io_server is set in
+ <em>binary mode</em>) the returned data is also
+ <em>always</em> encoded as UTF-8. The file module however
+ still returns byte-oriented data, why file:read can be
+ used instead of io:get_chars to read binary data in
+ ISO-latin-1.</p>
+ <p><em>io_lib module incompatibilities:</em></p>
+ <p>io_lib:format can, given new format directives (i.e
+ "~ts" and "~tc"), return lists containing integers larger
+ than 255. </p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-7648 Aux Id: OTP-7580 OTP-7514 OTP-7494
+ OTP-7443 OTP-7181 EEP10 EEP11 </p>
+ </item>
+ <item>
+ <p>
+ The format of the string returned by
+ <c>erlang:system_info(system_version)</c> (as well as the
+ first message when Erlang is started) has changed. The
+ string now contains the both the OTP version number as
+ well as the erts version number.</p>
+ <p>
+ Own Id: OTP-7649</p>
+ </item>
+ <item>
+ <p>
+ Message passing has been further optimized for parallel
+ execution. Serial message passing is slightly more
+ expensive than before, but parallel send to a common
+ receiver is much cheaper.</p>
+ <p>
+ Own Id: OTP-7659</p>
+ </item>
+ <item>
+ <p>
+ Lock contention on the atom table lock when decoding
+ Erlang terms on the external format has been drastically
+ reduced.</p>
+ <p>
+ Own Id: OTP-7660</p>
+ </item>
+ <item>
+ <p>
+ The undocumented, unsupported, and deprecated guard BIF
+ <c>is_constant/1</c> has been removed.</p>
+ <p>
+ *** INCOMPATIBILITY with R12B ***</p>
+ <p>
+ Own Id: OTP-7673</p>
+ </item>
+ <item>
+ <p>
+ The Erlang process lock implementation has been improved
+ by Mat Hostetter at Tilera Corporation.</p>
+ <p>
+ Own Id: OTP-7692</p>
+ </item>
+ <item>
+ <p>
+ A <c>{nodedown, Node}</c> message passed by the
+ <c>net_kernel:monitor_nodes/X</c> functionality is now
+ guaranteed to be sent after <c>Node</c> has been removed
+ from the result returned by <c>erlang:nodes/Y</c>.</p>
+ <p>
+ Own Id: OTP-7725</p>
+ </item>
+ <item>
+ <p>The short-circuit operators <c>andalso</c> and
+ <c>orelse</c> no longer guarantees that their second
+ argument is either <c>true</c> or <c>false</c>. As a
+ consequence, <c>andalso</c>/<c>orelse</c> are now
+ tail-recursive.</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-7748</p>
+ </item>
+ <item>
+ <p>
+ A new BIF, <c>lists:keyfind/3</c>, has been added. It
+ works like <c>lists:keysearch/3</c> except that it does
+ not wrap the returned tuple in a <c>value</c> tuple in
+ case of success. (Thanks to James Hague for suggesting
+ this function.)</p>
+ <p>
+ Own Id: OTP-7752</p>
+ </item>
+ <item>
+ <p>
+ Optimization for drivers by creating small binaries
+ direct on process heap.</p>
+ <p>
+ Own Id: OTP-7762</p>
+ </item>
+ <item>
+ <p><c>I bsl N</c> could cause the Erlang virtual machine
+ to run of memory instead generating a <c>system_limit</c>
+ if N was absurdly huge. (Thanks to Daniel Hedlund.)</p>
+ <p>There would always be a garbage collection when
+ evaluating <c>I bsl N</c> or <c>I bsr N</c> if <c>I</c>
+ was a bignum.</p>
+ <p>If <c>I</c> is an integer and <c>N</c> a bignum, <c>I
+ bsl N</c> will now cause the correct <c>system_limit</c>
+ exception instead of <c>bad_arith</c> as in earlier
+ releases.</p>
+ <p>If <c>I</c> is an integer and <c>N</c> a bignum, <c>I
+ bsr N</c> will return either 0 or -1 depending on the
+ sign of <c>I</c> instead of causing a <c>bad_arith</c>
+ exception as in earlier releases.</p>
+ <p>
+ Own Id: OTP-7764</p>
+ </item>
+ <item>
+ <p>
+ Scheduler threads can now be bound to logical processors
+ on newer Linux and Solaris systems. More systems will be
+ supported in the future.</p>
+ <p>
+ In some cases performance has increased drastically when
+ binding schedulers. Schedulers are not bound by default,
+ though. This since it might cause a performance
+ degradation if multiple programs have bound to
+ processors, e.g. multiple Erlang runtime systems. For
+ more information see the documentation of
+ <c>erlang:system_flag/2</c>.</p>
+ <p>
+ In order to bind scheduler threads the CPU topology need
+ to be known. On some newer Linux and Solaris systems the
+ runtime system automatically detects the CPU topology. If
+ the emulator isn't able to automatically detect the CPU
+ topology, the CPU topology can be defined. For more
+ information see the documentation of
+ <c>erlang:system_flag/2</c>.</p>
+ <p>
+ Own Id: OTP-7777</p>
+ </item>
+ <item>
+ <p>The compiler will refuse to a compile file where the
+ module name in the file differs from the output file
+ name.</p>
+ <p>When compiling using <c>erlc</c>, the current working
+ directory will no be included in the code path (unless
+ explicitly added using "-pa .").</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-7793</p>
+ </item>
+ <item>
+ <p>
+ The BIFs <c>atom_to_binary/2</c>,
+ <c>binary_to_atom/2</c>, and
+ <c>binary_to_existing_atom/2</c> have been added.</p>
+ <p>
+ Own Id: OTP-7804</p>
+ </item>
+ <item>
+ <p>
+ The amount of schedulers online can now be changed during
+ operation. The amount of schedulers online defaults to
+ the same amount as available logical processors. For more
+ information see the documentation of
+ <c>erlang:system_flag/2</c> and <c>erl</c>.</p>
+ <p>
+ Own Id: OTP-7811</p>
+ </item>
+ <item>
+ <p>The deprecated functions <c>erlang:fault/1</c>,
+ <c>erlang:fault/2</c>, and <c>file:rawopen/2</c> have
+ been removed.</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-7812</p>
+ </item>
+ <item>
+ <p>
+ Erts internal dynamically allocated process and port
+ specific data for rarely used data. This is used to
+ reduce memory usage of processes and ports that do not
+ use specific functionality. More functionality will be
+ moved to process and port specific data in future
+ releases.</p>
+ <p>
+ Own Id: OTP-7818</p>
+ </item>
+ <item>
+ <p>
+ New packet type <c>http_bin</c> for gen_tcp sockets and
+ <c>erlang:decode_packet</c>. It works like <c>http</c>
+ except that strings are returned as binaries instead of
+ lists.</p>
+ <p>
+ Own Id: OTP-7821</p>
+ </item>
+ <item>
+ <p>
+ The obsolete wd_keeper program for embedded Solaris
+ systems has been removed.</p>
+ <p>
+ Own Id: OTP-7822</p>
+ </item>
+ <item>
+ <p>
+ Nodes belonging to different independent clusters can now
+ co-exist on the same host with the help of a new
+ environment variable setting ERL_EPMD_PORT.</p>
+ <p>
+ Own Id: OTP-7826</p>
+ </item>
+ <item>
+ <p>There are new functions <c>erlang:min/2</c> and
+ <c>erlang:max/2</c> to calculate the minimum and maximum
+ of two terms, respectively. Note that the functions are
+ not auto-imported, so they need to be imported explicitly
+ or the <c>erlang</c> prefix must be used when calling
+ them.</p>
+ <p>
+ Own Id: OTP-7841</p>
+ </item>
+ <item>
+ <p>The copyright notices have been updated.</p>
+ <p>
+ Own Id: OTP-7851</p>
+ </item>
+ <item>
+ <p>Enhanced build environment for cross compilation to
+ Tilera Tile architecture.</p>
+ <p>Support for native ethread atomics on Tilera
+ Tile64/TilePro (Thanks to Tilera Corporation).</p>
+ <p>
+ Own Id: OTP-7852</p>
+ </item>
+ <item>
+ <p>The escape sequences <c>\x</c> and <c>\{</c> have been
+ assigned new interpretations (they used to return the
+ ASCII code for <c>x</c> and <c>{</c> respectively). One
+ or more octal characters inside curly brackets after a
+ leading backslash is from now on an alternative to the
+ existing syntax <c>\NNN</c>, but can also be used for
+ codes greater than 255. In a similar fashion, one or more
+ hexadecimal characters can be put inside curly brackets
+ after a leading <c>\x</c>. Furthermore, the escape
+ sequences <c>\xH</c> and <c>\xHH</c>, where N is a
+ hexadecimal character, can be used for codes less than
+ 256.</p>
+ <p>NOTE: These new escape sequences are still considered
+ experimental and may be changed in the R13B release.</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-7855</p>
+ </item>
+ <item>
+ <p>
+ The PCRE library's exported function names are now
+ prefixed with erts_ in the erlang emulator to avoid
+ clashes with dynamically loaded drivers.</p>
+ <p>
+ Own Id: OTP-7861</p>
+ </item>
+ <item>
+ <p>
+ A runtime system with SMP support will now be built by
+ default on most platforms if a usable posix thread
+ library or native windows threads are found.</p>
+ <p>
+ For more information see the top README file.</p>
+ <p>
+ Own Id: OTP-7872</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+
+<section><title>Erts 5.6.5.1</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ A corrected bug in <c>ets</c> for <c>bag</c> and
+ <c>duplicate_bag</c>. A <c>delete/2</c> or
+ <c>lookup_element/3</c> could miss objects in a fixed
+ table if one or more objects with the same key had
+ already been deleted.</p>
+ <p>
+ Own Id: OTP-7665</p>
+ </item>
+ <item>
+ <p>
+ A bug fixed for TCP sockets with option
+ <c>{packet,http}</c>. An HTTP request with an absolute
+ URI was returned with a corrupt path string. This bug did
+ only exist in R12B-4 and R12B-5.</p>
+ <p>
+ Own Id: OTP-7682 Aux Id: OTP-7647 </p>
+ </item>
+ <item>
+ <p>
+ Calling <c>gen_tcp:send()</c> from several processes on
+ socket with option <c>send_timeout</c> could lead to much
+ longer timeout than specified. The solution is a new
+ socket option <c>{send_timeout_close,true}</c> that will
+ do automatic close on timeout. Subsequent calls to send
+ will then immediately fail due to the closed connection.</p>
+ <p>
+ Own Id: OTP-7731 Aux Id: seq11161 </p>
+ </item>
+ <item>
+ <p>
+ A process being garbage collected via the
+ <c>garbage_collect/1</c> BIF or the
+ <c>check_process_code/2</c> BIF didn't handle message
+ receive and resume correctly during the garbage collect.
+ When this occurred, the process returned to the state it
+ had before the garbage collect instead of entering the
+ new state.</p>
+ <p>
+ Own Id: OTP-7738</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 5.6.5</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ A bug in inet_drv concerning gen_tcp:connect has been
+ corrected. A connect towards a non-open port through open
+ firewalls could sometimes erroneously be successful. Any
+ subsequent operation would fail, though.</p>
+ <p>
+ Own Id: OTP-6542</p>
+ </item>
+ <item>
+ <p>
+ Floating point arithmetics in drivers could cause a
+ runtime system crash and/or unexpected results on runtime
+ systems with floating point exceptions enabled. Floating
+ point exceptions are disabled unless explicitly enabled
+ or if hipe is enabled.</p>
+ <p>
+ Own Id: OTP-7237</p>
+ </item>
+ <item>
+ <p>
+ A bug when many sockets got signalled simultaneously
+ causing the emulator to panic with the message
+ "Inconsistent, why isnt io reported?" is now corrected.</p>
+ <p>
+ Own Id: OTP-7420</p>
+ </item>
+ <item>
+ <p>
+ Starting erl with option "-detached" now disconnects
+ correctly from terminal session on Unix.</p>
+ <p>
+ Own Id: OTP-7461</p>
+ </item>
+ <item>
+ <p>
+ Mended gdb etp-commands for ETS access.</p>
+ <p>
+ Own Id: OTP-7538</p>
+ </item>
+ <item>
+ <p>
+ <c>erlang:decode_packet/3</c> allows white space between
+ HTTP header tag and colon according to RFC2616.</p>
+ <p>
+ Own Id: OTP-7543</p>
+ </item>
+ <item>
+ <p>
+ An emulator compiled for SCTP now starts even if the
+ dynamic libraries are not present. The SCTP driver is
+ then of course not loaded.</p>
+ <p>
+ Own Id: OTP-7551</p>
+ </item>
+ <item>
+ <p>To build on Mac OS X, 10.3.0 or later is now required
+ because of fixes for two problems:</p>
+ <p>There would be a resource leak when <c>erl_ddl</c>
+ attempted to unload a driver. This problem has been
+ corrected by using <c>dlopen()</c> (which works on all
+ modern Unix-like platforms) instead of the Mac OS X
+ specific API calls.</p>
+ <p>Signal handling in the run-time system for HiPE has
+ been updated to work on later versions of Mac OS X than
+ 10.2.x. Therefore, <c>--enable-hipe</c> now works on Mac
+ OS X with Intel CPUs.</p>
+ <p>Thanks to Geoff Cant for the patches.</p>
+ <p>
+ Own Id: OTP-7562</p>
+ </item>
+ <item>
+ <p>Corrected some information about the protocol between
+ EPMD and Erlang nodes. (Thanks to Michael Regen.)</p>
+ <p>
+ Own Id: OTP-7594</p>
+ </item>
+ <item>
+ <p>
+ When using
+ <c>erlang:system_monitor(Pid,{long_gc,Time})</c>, and the
+ GC time exceeded 1 second, it sometimes erroneously
+ showed up as about 4300 seconds. (This bug was corrected
+ in R9C, but re-introduced in R12B.) (Thanks to Chris
+ Newcombe.)</p>
+ <p>
+ Own Id: OTP-7622 Aux Id: OTP-4903, seq8379 </p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ The driver entry of a dynamically loaded driver is now
+ copied when loaded which enables some internal
+ optimizations. Note that drivers that modify the driver
+ entry during execution will not work anymore. Such a
+ miss-use of the driver interface is however not
+ supported.</p>
+ <p>
+ Own Id: OTP-6900</p>
+ </item>
+ <item>
+ <p>
+ The split function is now added to the re library.
+ Exceptions and errors from both run, replace and split
+ are made more consistent.</p>
+ <p>
+ Own Id: OTP-7514 Aux Id: OTP-7494 </p>
+ </item>
+ <item>
+ <p>
+ Fixed harmless compiler warnings when building the
+ emulator and minor build changes in order to avoid
+ unnecessary rebuilds.</p>
+ <p>
+ Own Id: OTP-7530</p>
+ </item>
+ <item>
+ <p>
+ There is now experimental support for loading of code
+ from archive files. See the documentation of <c>code</c>,
+ <c>init</c>, <c>erl_prim_loader </c> and <c>escript</c>
+ for more info.</p>
+ <p>
+ The error handling of <c>escripts</c> has been improved.</p>
+ <p>
+ An <c>escript</c> may now set explicit arguments to the
+ emulator, such as <c>-smp enabled</c>.</p>
+ <p>
+ An <c>escript</c> may now contain a precompiled beam
+ file.</p>
+ <p>
+ An <c>escript</c> may now contain an archive file
+ containing one or more applications (experimental).</p>
+ <p>
+ The internal module <c>code_aux</c> has been removed.</p>
+ <p>
+ Own Id: OTP-7548 Aux Id: otp-6622 </p>
+ </item>
+ <item>
+ <p>
+ The reallocation functionality part of the ERTS internal
+ memory allocators, now consider current block in
+ combination with surrounding free blocks as an
+ alternative location for a reallocation.</p>
+ <p>
+ Own Id: OTP-7555</p>
+ </item>
+ <item>
+ <p>There could remain false references from a process to
+ a module that has been called earlier, so that the
+ process would be killed if the module was reloaded.
+ (Thanks to Richard Carlsson.)</p>
+ <p>Also, the fix for this bug also made it possible to
+ make stack backtraces (as returned from
+ <c>erlang:get_stacktrace/0</c> and other functions) more
+ correct in that the immediate caller is always included
+ in the stack backtrace (it could sometimes be
+ missing).</p>
+ <p>
+ Own Id: OTP-7559</p>
+ </item>
+ <item>
+ <p>
+ Improved locking in IO-handling for better smp
+ performance.</p>
+ <p>
+ Own Id: OTP-7560</p>
+ </item>
+ <item>
+ <p>
+ Improved BIF rescheduling functionality.</p>
+ <p>
+ Own Id: OTP-7587</p>
+ </item>
+ <item>
+ <p>
+ Loading a module compiled with Erlang/OTP R9C and calling
+ <c>module_info/0</c> in the module would crash the
+ emulator. The emulator now refuses to load any module
+ compiled with R9C or earlier. (Note: only trivial modules
+ compiled with R10B or earlier could be loaded anyway.)
+ (Thanks to Martin Kjellin.)</p>
+ <p>
+ Own Id: OTP-7590</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 5.6.4.2</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ A process calling one of the following BIFs could under
+ very rare conditions deadlock in the runtime system with
+ SMP support: <c>check_process_code/2</c>,
+ <c>garbage_collect/1</c>, <c>process_info/[1,2]</c>,
+ <c>system_flag/2</c>, and
+ <c>erlang:suspend_process/[1,2]</c>.</p>
+ <p>
+ Own Id: OTP-7582</p>
+ </item>
+ <item>
+ <p>
+ A couple of statistics variables were not managed in a
+ thread safe manner in the runtime system with SMP
+ support.</p>
+ <p>
+ Own Id: OTP-7583</p>
+ </item>
+ <item>
+ <p>
+ An extremely rare race condition when terminating a
+ process could potentially cause a runtime system crash.</p>
+ <p>
+ Own Id: OTP-7584</p>
+ </item>
+ <item>
+ <p>
+ Under certain conditions and when using run_erl/to_erl,
+ the terminal Erlang driver (ttsl_drv) could crash the
+ emulator by doing a division by zero due to incorrect
+ handling of terminals reporting a zero width. For
+ terminals reporting zero width, the driver now fallbacks
+ to a default width of 80 and a default height of 24
+ (vt100), as a fallback behaviour. This fixes the crashes
+ and also makes output on "dumb" terminals much more
+ readable.</p>
+ <p>
+ Own Id: OTP-7592 Aux Id: seq11073 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 5.6.4.1</title>
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ A new <c>erts_alloc</c> parameter
+ <c>+M&lt;S&gt;rmbcmt</c> (relative multiblock carrier
+ move threshold) has been added. It determines when to
+ force a moving realloc in a multiblock carrier when a
+ block is shrunk. For more information see the
+ <c>erts_alloc(3)</c> documentation.</p>
+ <p>
+ Own Id: OTP-7540</p>
+ </item>
+ <item>
+ <p>The new option <c>+d</c> can be given to <c>erl</c> to
+ suppress the crash dump generation if an internal error
+ is detected. As a result, a more useful core dump is
+ produced.</p>
+ <p>
+ Own Id: OTP-7578 Aux Id: seq11052 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 5.6.4</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Double backslashes in format string passed to the erts
+ internal printf implementation produced erroneous
+ results. No such format strings were passed to the erts
+ internal printf implementation, i.e., the bug was
+ therefore completely harmless. (Thanks to Perry Smith.)</p>
+ <p>
+ Own Id: OTP-7408</p>
+ </item>
+ <item>
+ <p>
+ Large files are now handled on Windows, where the
+ filesystem supports it.</p>
+ <p>
+ Own Id: OTP-7410</p>
+ </item>
+ <item>
+ <p>
+ Bug fixed for <c>{packet,http}</c> when space follows
+ http headers.</p>
+ <p>
+ Own Id: OTP-7458</p>
+ </item>
+ <item>
+ <p>
+ The trace option <c>running</c> could cause an emulator
+ crash if the current function couldn't be determined.</p>
+ <p>
+ Own Id: OTP-7484</p>
+ </item>
+ <item>
+ <p>
+ Using 16#ffffFFFF as a timeout value in receive...after
+ would often cause a timeout almost at once due to an
+ 32-bit integer overflow. (Thanks to Serge Aleynikov and
+ Matthias Lang.)</p>
+ <p>
+ Own Id: OTP-7493</p>
+ </item>
+ <item>
+ <p>
+ For the process that an escript runs in, the
+ <c>trap_exit</c> process flag is now <c>false</c> instead
+ of <c>true</c> (as in previous releases). Scripts that
+ depend on the previous (counter-intuitive) behaviour
+ might not work. (Thanks to Bengt Kleberg.)</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-7517</p>
+ </item>
+ <item>
+ <p>
+ A bug in the <c>string:to_integer/1</c> builtin made the
+ emulator unstable. This is now corrected. (Thanks to Lev
+ Walkin.)</p>
+ <p>
+ Own Id: OTP-7526</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>Performance for ETS intensive applications should now
+ be better in the SMP emulator. Also, ETS table
+ identifiers (as returned by <c>ets:new/2</c>) are now
+ spread out in wider range than before (using 28 bits in a
+ 32-bit emulator) to make sure that the table identifier
+ for a deleted table will not be quickly re-used.</p>
+ <p>NOTE: Table identifiers can now be negative integers.
+ Programs that (incorrectly) assume that table identifiers
+ can only be positive integers might stop to work. (The
+ type of a table identifier is intentionally not
+ documented, and may change in a future release.)</p>
+ <p>
+ Own Id: OTP-7348</p>
+ </item>
+ <item>
+ <p>
+ New BIF <c>erlang:decode_packet/3</c> that extracts a
+ protocol packet from a binary. Similar to the socket
+ option <c>{packet, Type}</c>. Also documented the socket
+ packet type <c>http</c> and made it official.
+ <em>NOTE</em>: The tuple format for <c>http</c> packets
+ sent from an active socket has been changed in an
+ incompatible way.</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-7404</p>
+ </item>
+ <item>
+ <p>
+ The source code for the documentation for some
+ applications (erts, kernel, stdlib, and several others)
+ are now included in the source tar ball. There is
+ currently no Makefile support for building HTML files
+ from the source (such support will be included in a
+ future release).</p>
+ <p>
+ Own Id: OTP-7406</p>
+ </item>
+ <item>
+ <p>
+ A lot of frequently accessed memory counters (erts
+ internal) have been removed. This since they hurt
+ performance on the runtime system with SMP support. As a
+ result <c>erlang:memory/[0,1]</c> will only deliver a
+ result if all <c>erts_alloc(3)</c> allocators are enabled
+ (default). The result delivered when all
+ <c>erts_alloc(3)</c> allocators are enabled are both more
+ accurate and less accurate than before. More memory than
+ before are included in the result, but the different
+ parts that are summed are not gathered atomically. A call
+ to <c>erlang:memory/[0,1]</c> is much cheaper for the
+ system than before. This since the information isn't
+ gathered atomically anymore which was very expensive.</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-7468</p>
+ </item>
+ <item>
+ <p>
+ Pre-allocators used for, for example, timers, and
+ messages have been rewritten to be scheduler specific.
+ That is, different schedulers will now allocate from
+ different pools which reduces lock contention.</p>
+ <p>
+ Own Id: OTP-7470</p>
+ </item>
+ <item>
+ <p>
+ On Mac OS X, file:sync/1 now guarantees that all
+ filesystem buffers are written to the disk by using the
+ fcntl() with F_FULLFSYNC option. Previously, file:sync/1
+ called fsync(), which only guaranteed that the data had
+ been transferred to the disk drive. (Thanks to Jan
+ Lehnardt.)</p>
+ <p>
+ Own Id: OTP-7471</p>
+ </item>
+ <item>
+ <p>
+ Termination of a process that takes a long time can now
+ be preempted, i.e., the terminating process will be
+ rescheduled for later continuation of termination so that
+ other processes can execute. Termination of a process
+ that owns many and/or large ets tables typically takes a
+ long time.</p>
+ <p>
+ Own Id: OTP-7477</p>
+ </item>
+ <item>
+ <p>
+ A new trace option <c>exiting</c> has been added. The
+ <c>exiting</c> trace is similar to the <c>running</c>
+ trace, but for exiting processes. For more information
+ see the erlang(3) documentation.</p>
+ <p>
+ The <c>erlang:trace/3</c> bif now doesn't block other
+ scheduler threads if only one tracee is specified in the
+ call to <c>erlang:trace/3</c>.</p>
+ <p>
+ Own Id: OTP-7481</p>
+ </item>
+ <item>
+ <p>
+ The re module is extended with repetitive matches (global
+ option) and replacement function.</p>
+ <p>
+ Own Id: OTP-7494 Aux Id: OTP-7181 </p>
+ </item>
+ <item>
+ <p>
+ In the section about binary construction, the reference
+ manual now mentions what happens when an integer value
+ does not fit into an integer segment of size N (namely,
+ that the N least significant bits will be put into into
+ the binary and that the most significant bits will be
+ silently discarded). (Thanks to Edwin Fine.)</p>
+ <p>
+ Own Id: OTP-7506</p>
+ </item>
+ <item>
+ <p>
+ Setting the <c>{active,once}</c> for a socket (using
+ inets:setopts/2) is now specially optimized (because the
+ <c>{active,once}</c> option is typically used much more
+ frequently than other options).</p>
+ <p>
+ Own Id: OTP-7520</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Known Bugs and Problems</title>
+ <list>
+ <item>
+ <p>
+ Floating point arithmetics in drivers can cause a runtime
+ system crash and/or unexpected results on runtime systems
+ with floating point exceptions enabled. Floating point
+ exceptions are disabled unless explicitly enabled or if
+ hipe is enabled.</p>
+ <p>
+ Own Id: OTP-7237</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 5.6.3.3</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Binary construction with an integer field of size 0 at
+ the end of the constructed binary (and the size given in
+ a variable), would cause a write of one byte outside the
+ memory reserved for the binary, which in turn could cause
+ an emulator crash.</p>
+ <p>
+ Own Id: OTP-7422</p>
+ </item>
+ <item>
+ <p>
+ A race condition in the dynamic driver implementation
+ could cause an emulator crash. (Thanks to Paul Fisher)</p>
+ <p>
+ Own Id: OTP-7464</p>
+ </item>
+ <item>
+ <p>
+ Calls to <c>erlang:system_info(allocated_areas)</c> could
+ cause the runtime system with SMP support to crash.</p>
+ <p>
+ Own Id: OTP-7474</p>
+ </item>
+ <item>
+ <p>
+ The <c>env</c> option to <c>open_port()</c> could cause
+ the runtime system with SMP support to crash.</p>
+ <p>
+ Own Id: OTP-7475</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Operations that needed to block other threads in the
+ runtime system with SMP support unnecessarily waited for
+ async threads to block. Most important the
+ <c>erlang:memory/[0,1]</c> bif, code loading, and the
+ <c>erlang:trace/3</c> bif.</p>
+ <p>
+ Own Id: OTP-7480</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 5.6.3.2</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Calls to <c>erlang:memory/[0,1]</c> could cause the
+ runtime system with SMP support to crash.</p>
+ <p>
+ Own Id: OTP-7415</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 5.6.3.1</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Doing local call trace on bit syntax matching code that
+ has been optimized with delayed sub-binary creation could
+ crash the emulator.</p>
+ <p>
+ Own Id: OTP-7399 Aux Id: seq10978 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 5.6.3</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Only one to_erl process at a time is allowed to connect
+ to the same run_erl pipe. Prevents buggy behaviour when
+ IO from several to_erl's get interleaved.</p>
+ <p>
+ Own Id: OTP-5107</p>
+ </item>
+ <item>
+ <p>
+ IPv6 name resolving has now been fixed to use
+ getaddrinfo() patch (thoroughly reworked) courtesy of Love
+ H�rnquist-�strand submitted by Fredrik Thulin. It also
+ can use gethostname2() patch (also reworked) courtesy of
+ Mikael Magnusson for debian submitted by Sergei Golovan.</p>
+ <p>
+ Own Id: OTP-5382</p>
+ </item>
+ <item>
+ <p>
+ Improved error handling in run_erl</p>
+ <p>
+ Own Id: OTP-7252</p>
+ </item>
+ <item>
+ <p>A permanent fix for the deadlock issue temporarily
+ fixed by OTP-7260.</p> <taglist><tag>OTP-7260</tag><item>
+ The runtime system with SMP support could under rare
+ circumstances deadlock when a distribution channel was
+ taken down while multiple simultaneous operations were
+ performed on it. </item></taglist>
+ <p>
+ Own Id: OTP-7267 Aux Id: OTP-7260 </p>
+ </item>
+ <item>
+ <p>
+ ./configure has been improved to find 64-bit OpenSSL
+ libraries.</p>
+ <p>
+ Own Id: OTP-7270</p>
+ </item>
+ <item>
+ <p>
+ A terminating process could under very rare circumstances
+ trigger a bug which could crash the runtime system with
+ SMP support.</p>
+ <p>
+ Own Id: OTP-7272</p>
+ </item>
+ <item>
+ <p>
+ SCTP_ADDR_CONFIRMED events are now handled by gen_sctp.</p>
+ <p>
+ Own Id: OTP-7276</p>
+ </item>
+ <item>
+ <p>
+ binary_to_term/1 would crash the emulator if the binary
+ data contained an external fun with non-atom module
+ and/or function. Corrected to generate a badarg
+ exception.</p>
+ <p>
+ Own Id: OTP-7281</p>
+ </item>
+ <item>
+ <p>
+ On Mac OS 10.5 (Leopard), sending to socket which the
+ other end closes could cause the emulator to consume 100%
+ CPU time. (Thanks to Matthias Radestock.)</p>
+ <p>
+ Own Id: OTP-7289</p>
+ </item>
+ <item>
+ <p>
+ The vanilla driver used on Windows could crash the
+ emulator and sometimes produced corrupt files. The
+ vanilla driver is the driver that is used when one only
+ pass a filename as first argument to <c>open_port/2</c>.
+ <em>NOTE</em>: This use of <c>open_port/2</c> is
+ <em>obsolete</em>, and the documentation of this use has
+ previously been removed. The functionality is only
+ present for backward compatibility reasons and
+ <em>will</em> eventually be removed.</p>
+ <p>
+ Own Id: OTP-7301</p>
+ </item>
+ <item>
+ <p>
+ Faulty matching in binaries larger than 512Mb on 64bit
+ machines fixed.(On 32bit, the size limit for binaries is
+ still 512Mb). Thanks to Edwin Fine and Per Gustafsson for
+ finding fault and fix.</p>
+ <p>
+ Own Id: OTP-7309</p>
+ </item>
+ <item>
+ <p>
+ crypto:start() on Windows caused emulator to hang on
+ error popup window if openssl DLL was not found. Windows
+ error popups now suppressed.</p>
+ <p>
+ Own Id: OTP-7325</p>
+ </item>
+ <item>
+ <p>
+ Configuration option <c>without-termcap</c> can be used to
+ disable the use of termcap libraries for terminal cursor
+ control in the shell.</p>
+ <p>
+ Own Id: OTP-7338</p>
+ </item>
+ <item>
+ <p>
+ to_erl reports its terminal window size to run_erl in
+ order to get output formatted accordingly</p>
+ <p>
+ Own Id: OTP-7342</p>
+ </item>
+ <item>
+ <p>
+ On Solaris, the <c>compressed</c> option for file
+ operations did not work if the file descriptor happened
+ to be greater than 255 (a problem with fopen() and
+ friends in Solaris itself).</p>
+ <p>
+ Own Id: OTP-7343 Aux Id: seq10949 </p>
+ </item>
+ <item>
+ <p>
+ A race condition in the runtime system with SMP support
+ causing an erroneous removal of a newly created ets table
+ has been fixed.</p>
+ <p>
+ The race occurred when a process removed a table during
+ termination simultaneously as another process removed the
+ same table via <c>ets:delete/1</c> and a third process
+ created a table that accidentaly got the same internal
+ table index as the table being removed.</p>
+ <p>
+ Own Id: OTP-7349</p>
+ </item>
+ <item>
+ <p>
+ <c>zlib:inflate</c> failed when the size of the inflated
+ data was an exact multiple of the internal buffer size
+ (4000 bytes by default).</p>
+ <p>
+ Own Id: OTP-7359</p>
+ </item>
+ <item>
+ <p>
+ If the total number of allowed atoms is exceeded, there
+ will now be a controlled termination of the emulator with
+ a crash dump file. The emulator used to simply crash.
+ (Thanks Howard Yeh and Thomas Lindgren.)</p>
+ <p>
+ Own Id: OTP-7372</p>
+ </item>
+ <item>
+ <p>
+ The break handler in werl on Windows could cause the
+ emulator to hang or crash, that is now corrected.</p>
+ <p>
+ Own Id: OTP-7394 Aux Id: seq10969 </p>
+ </item>
+ <item>
+ <p>
+ The configure script now tests for an serious
+ optimization bug in gcc-4.3.0. If the bug is present, the
+ configure script will abort (if this happens, the only
+ way to build Erlang/OTP is to change to another version
+ of gcc). (Thanks to Mikael Pettersson.)</p>
+ <p>
+ Own Id: OTP-7397</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ On Unix, the emulator now notices when the width of the
+ terminal has changed. (Thanks to Matthew Dempsky and
+ Patrick Mahoney.)</p>
+ <p>
+ Own Id: OTP-7290</p>
+ </item>
+ <item>
+ <p>
+ There is a new function <c>init:stop/1</c> which can be
+ used to shutdown the system cleanly AND generate a
+ non-zero exit status or crash dump. (Thanks to Magnus
+ Froberg.)</p>
+ <p>
+ Own Id: OTP-7308</p>
+ </item>
+ <item>
+ <p>
+ process_info(Pid, garbage_collection) now returns more
+ information</p>
+ <p>
+ Own Id: OTP-7311</p>
+ </item>
+ <item>
+ <p>
+ The <c>hide</c> option for <c>open_port/2</c> is now
+ documented. (Thanks to Richard Carlsson.)</p>
+ <p>
+ Own Id: OTP-7358</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Known Bugs and Problems</title>
+ <list>
+ <item>
+ <p>
+ Floating point arithmetics in drivers can cause a runtime
+ system crash on runtime systems with floating point
+ exceptions enabled. Floating point exceptions are
+ disabled unless explicitly enabled or if hipe is enabled.</p>
+ <p>
+ Own Id: OTP-7237</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+
+<section><title>Erts 5.6.2</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ The maximum length of an atom of 255 characters is now
+ strictly enforced. <c>binary_to_term/1</c> will now fail
+ with a badarg if an encoded term contains an atom longer
+ than 255 characters. Atoms created by drivers will now be
+ truncated to 255 characters if necessary. (Thanks to
+ Matthew Dempsky.)</p>
+ <p>
+ Own Id: OTP-7147</p>
+ </item>
+ <item>
+ <p>
+ A bug in "bignum handling" on some 64bit architectures
+ could cause rem and div operations on large numbers to
+ hang indefinitely. Rem operations involving the smallest
+ negative number representable in 28 bits or 60 bits could
+ also cause access violation and emulator crash. Both
+ errors are corrected.</p>
+ <p>
+ Own Id: OTP-7177</p>
+ </item>
+ <item>
+ <p>
+ When doing the initial garbage collection after waking a
+ hibernated process, a fullsweep garbage collection was
+ unnecessarily triggered.</p>
+ <p>
+ Own Id: OTP-7212</p>
+ </item>
+ <item>
+ <p>The beta testing module <c>gen_sctp</c> now supports
+ active mode as stated in the documentation. Active mode
+ is still rather untested, and there are some issues about
+ what should be the right semantics for
+ <c>gen_sctp:connect/5</c>. In particular: should it be
+ blocking or non-blocking or choosable. There is a high
+ probability it will change semantics in a (near) future
+ patch.</p> <p>Try it, give comments and send in bug
+ reports!</p>
+ <p>
+ Own Id: OTP-7225</p>
+ </item>
+ <item>
+ <p>
+ Invalid arguments to <c>ets:update_counter/3</c> were not
+ handled correctly. A tuple position (<c>Pos</c>) less
+ than 1 caused the element directly following the key to
+ be updated (as if no position at all had been specified).
+ All invalid values for <c>Pos</c> will now fail with
+ <c>badarg</c>.</p>
+ <p>
+ Own Id: OTP-7226</p>
+ </item>
+ <item>
+ <p>
+ The runtime system with SMP support could under rare
+ circumstances deadlock when a distribution channel was
+ taken down while multiple simultaneous operations were
+ performed on it.</p>
+ <p>
+ Own Id: OTP-7260</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ More checksum/hash algorithms from the zlib library are
+ now available as built in functions (like md5 hashes has
+ been for a long time).</p>
+ <p>
+ Own Id: OTP-7128</p>
+ </item>
+ <item>
+ <p>
+ Minor improvements in the garbage collector.</p>
+ <p>
+ Own Id: OTP-7139 Aux Id: OTP-7132 </p>
+ </item>
+ <item>
+ <p>
+ The switch "-detached" to the windows werl program now
+ can create an erlang virtual machine without any main
+ window and without a temporary console showing.</p>
+ <p>
+ Own Id: OTP-7142</p>
+ </item>
+ <item>
+ <p><c>erlang:system_info/1</c> now accepts the
+ <c>logical_processors</c>, and <c>debug_compiled</c>
+ arguments. For more info see the, <c>erlang(3)</c>
+ documentation.</p> <p>The scale factor returned by
+ <c>test_server:timetrap_scale_factor/0</c> is now also
+ effected if the emulator uses a larger amount of
+ scheduler threads than the amount of logical processors
+ on the system. </p>
+ <p>
+ Own Id: OTP-7175</p>
+ </item>
+ <item>
+ <p>
+ A new BIF ets:update_element/3. To update individual
+ elements within an ets-tuple, without having to read,
+ update and write back the entire tuple.</p>
+ <p>
+ Own Id: OTP-7200</p>
+ </item>
+ <item>
+ <p>
+ A process executing the <c>processes/0</c> BIF can now be
+ preempted by other processes during its execution. This
+ in order to disturb the rest of the system as little as
+ possible. The returned result is, of course, still a
+ consistent snapshot of existing processes at a time
+ during the call to <c>processes/0</c>.</p>
+ <p>
+ The documentation of the <c>processes/0</c> BIF and the
+ <c>is_process_alive/1</c> BIF have been updated in order
+ to clarify the difference between an existing process and
+ a process that is alive.</p>
+ <p>
+ Own Id: OTP-7213</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+
+<section><title>Erts 5.6.1.1</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Not enough parameters were passed when sending an error
+ report in erl_check_io.c (Thanks to Matthew Dempsky).</p>
+ <p>
+ Own Id: OTP-7176</p>
+ </item>
+ <item>
+ <p>
+ In rare circumstances, complex binary matching code could
+ cause the emulator to crash or not match when it should.
+ (Thanks to Rory Byrne.)</p>
+ <p>
+ Own Id: OTP-7198</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>The <c>{allocator_sizes, Alloc}</c> and
+ <c>alloc_util_allocators</c> arguments are now accepted
+ by <c>erlang:system_info/1</c>. For more information see
+ the <c>erlang(3)</c> documentation.</p>
+ <p>
+ Own Id: OTP-7167</p>
+ </item>
+ <item>
+ <p>
+ The finishing reallocation of the heap block when
+ hibernating a process is now always moving the heap block
+ since it drastically reduces memory fragmentation when
+ hibernating large amounts of processes.</p>
+ <p>
+ Own Id: OTP-7187</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 5.6.1</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ The SMP emulator on sparc64 erroneously used the sparc32
+ atomic and the sparc32 spinlock implementations which
+ caused it to crash.</p>
+ <p>
+ Own Id: OTP-7006</p>
+ </item>
+ <item>
+ <p>
+ Call tracing the new guard BIFs <c>byte_size</c>,
+ <c>bit_size</c>, or <c>tuple_size</c> and the loading a
+ module that uses one of those functions, could cause the
+ emulator to terminate.</p>
+ <p>
+ Own Id: OTP-7008</p>
+ </item>
+ <item>
+ <p>
+ configuring --enable-darwin-universal or
+ --enable-darwin-64bit on MacOSX could result in a non
+ optimized emulator. Top level configure script now
+ corrected.</p>
+ <p>
+ Own Id: OTP-7014</p>
+ </item>
+ <item>
+ <p>
+ configuring --with-gd did not produce correct include
+ flags for percept.</p>
+ <p>
+ Own Id: OTP-7015</p>
+ </item>
+ <item>
+ <p>
+ Environment variables weren't handled in thread safe
+ manner in the runtime system with SMP support on Windows.</p>
+ <p>
+ <c>erl_drv_putenv()</c>, and <c>erl_drv_getenv()</c> has
+ been introduced for use in drivers. Do <em>not</em> use
+ putenv(), or getenv() directly in drivers. For more
+ information see the <c>erl_driver</c> documentation.</p>
+ <p>
+ Own Id: OTP-7035</p>
+ </item>
+ <item>
+ <p>
+ HIPE: Corrected the choice of interface to the send/3 and
+ setnode/3 BIFs for native-compiled code. Using the
+ incorrect interface could, in unusual circumstances, lead
+ to random runtime errors.</p>
+ <p>
+ Own Id: OTP-7067</p>
+ </item>
+ <item>
+ <p>
+ Garbage collections could become extremely slow when
+ there were many keys in the process dictionary. (Thanks
+ to Fredrik Svahn.)</p>
+ <p>
+ Own Id: OTP-7068</p>
+ </item>
+ <item>
+ <p>
+ The duplicate documentation directory in the windows
+ installation is removed.</p>
+ <p>
+ Own Id: OTP-7070</p>
+ </item>
+ <item>
+ <p>Documentation bugfixes and clarifications.</p> (Thanks
+ to Joern ([email protected]), Matthias Lang, and Richard
+ Carlsson.)
+ <p>
+ Own Id: OTP-7079</p>
+ </item>
+ <item>
+ <p>
+ The runtime system with SMP support <em>not</em> using
+ the native atomic integer implementation part of OTP
+ could deadlock when run on a system with more than one
+ logical processor. That is, only the runtime system with
+ SMP support on <em>other</em> hardware platforms than
+ x86, x86_64, sparc32, and powerpc32 were effected by this
+ bug.</p>
+ <p>
+ Own Id: OTP-7080</p>
+ </item>
+ <item>
+ <p>
+ The break handling code (run when Ctrl-C is hit) could
+ could potentially deadlock the runtime system with SMP
+ support.</p>
+ <p>
+ Own Id: OTP-7104</p>
+ </item>
+ <item>
+ <p>
+ The sctp driver has been updated to work against newer
+ lksctp packages e.g 1.0.7 that uses the API spelling
+ change adaption -> adaptation. Older lksctp (1.0.6) still
+ work. The erlang API in gen_sctp.erl and inet_sctp.hrl
+ now spells 'adaptation' regardless of the underlying C
+ API.</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-7120</p>
+ </item>
+ <item>
+ <p>A bug in <c>erlang:phash2/1</c> on 64-bit platforms
+ has been fixed. (Thanks to Scott Lystig Fritchie.)</p>
+ <p>
+ Own Id: OTP-7127</p>
+ </item>
+ <item>
+ <p>
+ The emulator could under rare circumstances crash while
+ garbage collecting.</p>
+ <p>
+ Own Id: OTP-7132</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>The documentation has been updated so as to reflect
+ the last updates of the Erlang shell as well as the minor
+ modifications of the control sequence <c>p</c> of the
+ <c>io_lib</c> module.</p> <p>Superfluous empty lines have
+ been removed from code examples and from Erlang shell
+ examples.</p>
+ <p>
+ Own Id: OTP-6944 Aux Id: OTP-6554, OTP-6911 </p>
+ </item>
+ <item>
+ <p>
+ Bit syntax construction with a small integer in a
+ non-byte aligned field wider than the CPU's word size
+ could cause garbage bits in the beginning of the field.</p>
+ <p>
+ Own Id: OTP-7085</p>
+ </item>
+ <item>
+ <p>
+ All Windows versions older than Windows 2000 are now
+ <em>not supported</em> by the Erlang runtime system. This
+ since there was a need for usage of features introduced
+ in Windows 2000.</p>
+ <p>
+ Own Id: OTP-7086</p>
+ </item>
+ <item>
+ <p>Memory management improvements especially for the
+ runtime system with SMP support:</p> <list> <item> The
+ runtime system with SMP support can now use multiple,
+ thread specific instances of most memory allocators. This
+ improves performance since it reduces lock contention in
+ the memory allocators. It may however increase memory
+ usage for some applications. The runtime system with SMP
+ support will by default enable this feature on most
+ allocators. The amount of instances used can be
+ configured. </item> <item> <c>driver_alloc()</c>,
+ <c>driver_realloc()</c>, and <c>driver_free()</c> now use
+ their own erts specific memory allocator instead of the
+ default <c>malloc()</c> implementation on the system.
+ </item> <item> The default configuration of some
+ allocators have been changed to fit applications that use
+ much memory better. </item> <item> Some new
+ <c>erts_alloc</c> configuration parameters have been
+ added. </item> <item> <c>erts_alloc_config</c> has been
+ modified to be able to create configurations suitable for
+ multiple instances of allocators. </item> <item> The
+ returned value from <c>erlang:system_info({allocator,
+ Alloc})</c> has been changed. This since an allocator may
+ now run in multiple instances. </item> </list> <p>If you
+ for some reason want the memory allocators to be
+ configured as before, you can pass the <c>+Mea r11b</c>
+ command-line argument to <c>erl</c>.</p> <p>For more
+ information see the <c>erts_alloc(3)</c>, the
+ <c>erts_alloc_config(3)</c>, and the <c>erlang(3)</c>
+ documentation.</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-7100</p>
+ </item>
+ <item>
+ <p>
+ On Unix, denormalized floating point numbers could not be
+ created using <c>list_to_float/1</c> or
+ <c>binary_to_term/1</c>. (Thanks to Matthew Dempsky.)</p>
+ <p>
+ Own Id: OTP-7122</p>
+ </item>
+ <item>
+ <p>
+ Native atomic integers and spin-locks are now also
+ available for the runtime system with SMP support on
+ sparc64.</p>
+ <p>
+ Own Id: OTP-7130</p>
+ </item>
+ <item>
+ <p>
+ FP exceptions support for sparc64 userspace on Linux has
+ been added. Note that FP exception support is now turned
+ off by default, so to actually enable it you need to do
+ '<c>./configure --enable-fp-exceptions</c>'.</p>
+ <p>
+ Own Id: OTP-7131</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 5.6</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ A bug for raw files when reading 0 bytes returning 'eof'
+ instead of empty data has been corrected.</p>
+ <p>
+ Own Id: OTP-6291 Aux Id: OTP-6967 </p>
+ </item>
+ <item>
+ <p>
+ All exported functions in gzio.c have now been renamed to
+ avoid conflict with drivers that are indirectly linked
+ with an external zlib library.</p>
+ <p>
+ Own Id: OTP-6816 Aux Id: OTP-6591 </p>
+ </item>
+ <item>
+ <p>
+ On the 64-bit Erlang emulator, bit syntax construction
+ with integers containing more than 60 bits ("big
+ numbers") into fields with more than 60 bits could
+ produce incorrect results.</p>
+ <p>
+ Own Id: OTP-6833</p>
+ </item>
+ <item>
+ <p>
+ When the runtime system failed to allocate memory for
+ binaries, it could dead lock while writing the
+ <c>erl_crash.dump</c>.</p>
+ <p>
+ Own Id: OTP-6848</p>
+ </item>
+ <item>
+ <p>
+ The runtime system with SMP support could deadlock if a
+ process called the <c>erlang:suspend_process(Pid)</c> BIF
+ or the <c>erlang:garbage_collect(Pid)</c> BIF while the
+ process identified by <c>Pid</c> was currently running
+ and the process calling the BIFs was terminated during
+ the call to the BIFs.</p>
+ <p>
+ Processes suspending each other via the
+ <c>erlang:suspend_process/1</c> BIF or garbage collecting
+ each other via the <c>erlang:garbage_collect/1</c> BIF
+ could deadlock each other when the runtime system with
+ SMP support was used.</p>
+ <p>
+ Own Id: OTP-6920</p>
+ </item>
+ <item>
+ <p>
+ <c>dbg</c> could leave traced processes in a suspended
+ state if the tracer process was killed with exit reason
+ <c>kill</c>.</p>
+ <p>
+ <c>erlang:suspend_process/2</c> has been introduced which
+ accepts an option list as second argument. For more
+ information see the <c>erlang(3)</c> documentation.</p>
+ <p>
+ Processes suspended via
+ <c>erlang:suspend_process/[1,2]</c> will now be
+ automatically resumed if the process that called
+ <c>erlang:suspend_process/[1,2]</c> terminates.</p>
+ <p>
+ Processes could previously be suspended by one process
+ and resumed by another unless someone was tracing the
+ suspendee. This is <em>not</em> possible anymore. The
+ process resuming a process <em>has</em> to be the one
+ that suspended it.</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-6946</p>
+ </item>
+ <item>
+ <p>file:write_file/3, file:write/2 and file:read/2 could
+ crash (contrary to documentation) for odd enough file
+ system problems, e.g write to full file system. This bug
+ has now been corrected.</p> <p>In this process the file
+ module has been rewritten to produce better error codes.
+ Posix error codes now originate from the OS file system
+ calls or are generated only for very similar causes (for
+ example 'enomem' is generated if a memory allocation
+ fails, and 'einval' is generated if the file handle in
+ Erlang is a file handle but currently invalid).</p>
+ <p>More Erlang-ish error codes are now generated. For
+ example <c>{error,badarg}</c> is now returned from
+ <c>file:close/1</c> if the argument is not of a file
+ handle type. See file(3).</p> <p>The possibility to write
+ a single byte using <c>file:write/2</c> instead of a list
+ or binary of one byte, contradictory to the
+ documentation, has been removed.</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-6967 Aux Id: OTP-6597 OTP-6291 </p>
+ </item>
+ <item>
+ <p>
+ Monitor messages produced by the system monitor
+ functionality, and garbage collect trace messages could
+ contain erroneous heap and/or stack sizes when the actual
+ heaps and/or stacks were huge.</p>
+ <p>
+ As of erts version 5.6 the <c>large_heap</c> option to
+ <c>erlang:system_monitor/[1,2]</c> has been modified. The
+ monitor message is sent if the sum of the sizes of all
+ memory blocks allocated for all heap generations is equal
+ to or larger than the specified size. Previously the
+ monitor message was sent if the memory block allocated
+ for the youngest generation was equal to or larger than
+ the specified size.</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-6974 Aux Id: seq10796 </p>
+ </item>
+ <item>
+ <p>
+ <c>inet:getopts/2</c> returned random values on Windows
+ Vista.</p>
+ <p>
+ Own Id: OTP-7003</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ The emulator internal process lock implementation has
+ been rewritten and optimized. A slight risk of starvation
+ existed in the previous implementation. This risk has
+ also been eliminated in the new implementation.</p>
+ <p>
+ Own Id: OTP-6500</p>
+ </item>
+ <item>
+ <p>
+ Bitstrings (bit-level) binaries and binary comprehensions
+ are now part of the language. See the Reference Manual.</p>
+ <p>
+ Own Id: OTP-6558</p>
+ </item>
+ <item>
+ <p>
+ The windows version of erlang now has SMP support. The
+ SMP emulator is run by default on machines which shows
+ more than one virtual or physical processor.</p>
+ <p>
+ Own Id: OTP-6560 Aux Id: OTP-6925 </p>
+ </item>
+ <item>
+ <p>
+ The details of the compressed term format has been
+ documented in erl_ext_dist.txt. (Thanks to Daniel
+ Goertzen.)</p>
+ <p>
+ Own Id: OTP-6755</p>
+ </item>
+ <item>
+ <p>
+ The runtime system with SMP support is now started by
+ default if more than one logical processor are detected.
+ For more information, see the <c>erl(3)</c>
+ documentation.</p>
+ <p>
+ Own Id: OTP-6756</p>
+ </item>
+ <item>
+ <p>
+ The external format for Erlang terms and the distribution
+ protocol are now documented in ERTS User's Guide.</p>
+ <p>
+ Own Id: OTP-6779</p>
+ </item>
+ <item>
+ <p>
+ New BIF's erlang:system_profile/1 and
+ erlang:system_profile/2. These BIF's controls concurrency
+ profiling options for processes, ports and schedulers.</p>
+ <p>
+ Own Id: OTP-6783 Aux Id: OTP-6285 </p>
+ </item>
+ <item>
+ <p>
+ The <c>ErlDrvTermData</c> term types used by
+ <c>driver_output_term()</c> and <c>driver_send_term()</c>
+ have been extended with the term types
+ <c>ERL_DRV_BUF2BINARY</c>, <c>ERL_DRV_EXT2TERM</c>, and
+ <c>ERL_DRV_UINT</c>. <c>ERL_DRV_BUF2BINARY</c> is used
+ for passing and creating a binary,
+ <c>ERL_DRV_EXT2TERM</c> is used for passing terms encoded
+ with the external term format, and <c>ERL_DRV_UINT</c> is
+ used for passing unsigned integers.</p>
+ <p>
+ Also the data types <c>ErlDrvUInt</c> and
+ <c>ErlDrvSInt</c> have been added which makes it more
+ obvious how arguments to term types are interpreted with
+ regards to width and signedness.</p>
+ <p>
+ The incorrect data types <c>ErlDriverTerm</c>,
+ <c>ErlDriverBinary</c>, and <c>ErlDriverPort</c> in the
+ <c>erl_driver(3)</c> documentation have been replaced
+ with the correct data types <c>ErlDrvTermData</c>,
+ <c>ErlDrvBinary</c>, and <c>ErlDrvPort</c>.</p>
+ <p>
+ For more information see the <c>erl_driver(3)</c>
+ documentation.</p>
+ <p>
+ Own Id: OTP-6823</p>
+ </item>
+ <item>
+ <p>
+ Miscellaneous improvements of the erts internal thread
+ library.</p>
+ <p>
+ It now support optimized atomic operations and spin-locks
+ on windows.</p>
+ <p>
+ Fall-backs based on mutexes and/or spin-locks for missing
+ optimized atomic operations, spin-locks, or rwlocks has
+ been implemented. This makes it possible to compile the
+ runtime system with SMP support on a lot more platforms.</p>
+ <p>
+ Default stack size on OpenBSD has been increased to 256
+ kilo-words.</p>
+ <p>
+ Own Id: OTP-6831 Aux Id: OTP-6560 </p>
+ </item>
+ <item>
+ <p>Many bit syntax operations, both construction and
+ matching, are faster. For further information, see the
+ Efficiency Guide.</p>
+ <p>
+ Own Id: OTP-6838</p>
+ </item>
+ <item>
+ <p>Literal lists, tuples, and binaries are no longer
+ constructed at run-time as they used to be, but are
+ stored in a per-module constant pool. Literals that are
+ used more than once are stored only once.</p>
+ <p>This is not a change to the language, only in the
+ details of its implementation. Therefore, the
+ implications of this change is described in the
+ Efficiency Guide.</p>
+ <p>Example 1: In the expression <c>element(BitNum-1,
+ {1,2,4,8,16,32,64,128})</c>, the tuple used to be
+ constructed every time the expression was executed, which
+ could be detrimental to performance in two ways if the
+ expression was executed in a loop: the time to build the
+ tuple itself and the time spent in garbage collections
+ because the heap filled up with garbage faster.</p>
+ <p>Example 2: Literal strings, such as <c>"abc"</c>, used
+ to be stored in the compiled code compactly as a byte
+ string and expanded to a list at run-time. Now all
+ strings will be stored expanded to lists (such as
+ <c>[$a,$b,$c]</c>) in the constant pool. That means that
+ the string will be faster to use at run-time, but that it
+ will require more space even when not used. If space is
+ an issue, you might want to use binary literals (that is,
+ <c>&lt;&lt;"abc"&gt;&gt;</c>) instead of string literals for
+ infrequently used long strings (such as error
+ messages).</p>
+ <p>
+ Own Id: OTP-6850</p>
+ </item>
+ <item>
+ <p>The Erlang driver API has been extended with a
+ portable POSIX thread like API for multi-threading. The
+ Erlang driver thread API provides:</p> <list>
+ <item>Threads</item> <item>Mutexes</item> <item>Condition
+ variables</item> <item>Read/Write locks</item>
+ <item>Thread specific data</item> </list> <p>For more
+ information see the <c>erl_driver(3)</c>
+ documentation.</p>
+ <p>
+ Own Id: OTP-6857</p>
+ </item>
+ <item>
+ <p>
+ Recursive calls now usually consume less stack than in
+ R11B. See the Efficiency Guide.</p>
+ <p>
+ Own Id: OTP-6862 Aux Id: seq10746 </p>
+ </item>
+ <item>
+ <p>
+ The deprecated BIFs <c>erlang:old_binary_to_term/1</c>
+ and <c>erlang:info/1</c> have been removed.</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-6876</p>
+ </item>
+ <item>
+ <p>
+ Calls to driver call-backs triggered by external events
+ are now scheduled and interleaved with execution of
+ Erlang processes also on the runtime system without SMP
+ support.</p>
+ <p>
+ Own Id: OTP-6878</p>
+ </item>
+ <item>
+ <p>
+ Faster arithmetic of integers of more than 27 bits signed
+ (or 60 bits signed on an 64-bit CPU), and also faster
+ integer multiplication. (Thanks to Tony Rogvall.)</p>
+ <p>
+ Own Id: OTP-6891</p>
+ </item>
+ <item>
+ <p>Significant improvements of the <c>process_info</c>
+ BIFs:</p> <list> <item> <c>process_info/2</c> can now be
+ called with a list of items as second argument in order
+ to atomically retrieve information about multiple items.
+ </item> <item> <c>process_info/[1,2]</c> has been
+ optimized in the runtime system with SMP support. The
+ whole scheduler could previously be blocked for a
+ significant period of time in <c>process_info/[1,2]</c>
+ waiting for a lock on the process being inspected. The
+ Erlang process calling <c>process_info/[1,2]</c> can
+ still be blocked for a significant period of time waiting
+ for the lock, but the scheduler will now be able to run
+ other processes while the process calling
+ <c>process_info/[1,2]</c> waits for the lock. </item>
+ <item> <c>process_info/2</c> now accept a few more items
+ than before. </item> <item> The documentation of
+ <c>process_info/[1,2]</c> has been improved. </item>
+ </list> <p>For more information see the <c>erlang(3)</c>
+ documentation.</p>
+ <p>
+ Own Id: OTP-6899</p>
+ </item>
+ <item>
+ <p>
+ <c>open_port({}, [])</c> could crash the emulator.
+ (Thanks to Matthew Dempsky.)</p>
+ <p>
+ Own Id: OTP-6901</p>
+ </item>
+ <item>
+ <p>Two new guard BIFs have been introduced as a
+ recommended replacement for <c>size/1</c>. (The
+ <c>size/1</c> BIF will be removed no earlier than in
+ R14B.) The BIFs are <c>tuple_size/1</c> to calculate the
+ size of a tuple and <c>byte_size/1</c> to calculate the
+ number of bytes needed for the contents of the binary or
+ bitstring (rounded up to the nearest number of bytes if
+ necessary).</p>
+ <p>There is also a new <c>bit_size/1</c> BIF that returns
+ the exact number of bits that a binary or bitstring
+ contains.</p>
+ <p>
+ Own Id: OTP-6902</p>
+ </item>
+ <item>
+ <p>The <c>ets:fixtable/2</c> function, which has been
+ deprecated for several releases, has been removed.</p>
+ <p>The <c>ets:info/1</c> function has been reimplemented
+ as a BIF, which guarantees that information returned is
+ consistent.</p>
+ <p>The <c>ets:info/2</c> function now fails with reason
+ <c>badarg</c> if the second argument is invalid.
+ (Dialyzer can be used to find buggy code where the second
+ argument is misspelled.)</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-6906</p>
+ </item>
+ <item>
+ <p>
+ As the linux kernel may generate a minor fault when
+ tracing with CPU timestamps, and there exists no patch to
+ the Linux kernel that fixes the problem, cpu timestamps
+ are disabled on Linux for now.</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-6922</p>
+ </item>
+ <item>
+ <p>The functions io:columns/0, io:columns/1, io:rows/0
+ and io:rows/1 are added to allow the user to get
+ information about the terminal geometry. The shell takes
+ some advantage of this when formatting output. For
+ regular files and other io-devices where height and width
+ are not applicable, the functions return
+ {error,enotsup}.</p>
+ <p>Potential incompatibility: If one has written a custom
+ io-handler, the handler has to either return an error or
+ take care of io-requests regarding terminal height and
+ width. Usually that is no problem as io-handlers, as a
+ rule of thumb, should give an error reply when receiving
+ unknown io-requests, instead of crashing.</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-6933</p>
+ </item>
+ <item>
+ <p>
+ <c>driver_caller()</c> can now also be used from the
+ <c>start</c> callback of a driver.</p>
+ <p>
+ Own Id: OTP-6951</p>
+ </item>
+ <item>
+ <p>
+ The emulator can now be compiled for 64bit intel, as well
+ as a 32bit universal binary on darwin/MacOSX 10.4 and
+ 10.5.</p>
+ <p>
+ Own Id: OTP-6961</p>
+ </item>
+ <item>
+ <p>
+ If <c>open_port</c> fails because all available ports are
+ already in use, it will now throw a <c>system_limit</c>
+ exception instead of an <c>enfile</c> exception.
+ (<c>enfile</c> might still be thrown if the operating
+ system would return ENFILE.)</p>
+ <p>
+ Own Id: OTP-6968</p>
+ </item>
+ <item>
+ <p>
+ The <c>spawn_monitor/1</c> and <c>spawn_monitor/3</c> BIFs
+ are now auto-imported (i.e. they no longer need an
+ <c>erlang:</c> prefix).</p>
+ <p>
+ Own Id: OTP-6975</p>
+ </item>
+ <item>
+ <p>
+ On Windows, the werl window now handles resize, so that
+ the whole window can be utilized. Text selection is also
+ updated to be line oriented instead of rectangle oriented
+ as in earlier versions.</p>
+ <p>
+ Own Id: OTP-6994 Aux Id: OTP-6933 </p>
+ </item>
+ <item>
+ <p>
+ Kqueue support (kernel-poll) has been enabled on FreeBSD.
+ The problem with kqueue not detecting writes on a pipe on
+ FreeBSD was actually not a kqueue issue, but a writev on
+ pipes issue. Neither poll(), nor select() detected the
+ write when the bug hit. NetBSD and DragonFlyBSD probably
+ have or have had the same bug. This bug should have been
+ fixed in FreeBSD 6.3 and FreeBSD 7.0 thanks to
+ Jean-Sebastien Pedron.</p>
+ <p>
+ Own Id: OTP-7001</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+
+<section><title>Erts 5.5.5.5</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Hanging writes on temporarily unavailable NFS
+ filesystems could cause the execution of (not file
+ related) erlang code to get blocked even though I/O
+ threads were used. This is now corrected.</p>
+ <p>
+ Own Id: OTP-6907 Aux Id: seq10771 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 5.5.5.4</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Data passed to a driver via <c>erlang:port_call</c> could
+ be corrupted when the runtime system with SMP support was
+ used. (Thanks to YAMASHINA Hio.)</p>
+ <p>
+ Own Id: OTP-6879</p>
+ </item>
+ <item>
+ <p>
+ In the SMP emulator, if several processes called
+ ets:update_counter/3 (even for different tables) when the
+ counter values exceeded 27 bits, the counter values could
+ be corrupted or the emulator could crash.</p>
+ <p>
+ Own Id: OTP-6880 Aux Id: seq10760 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+
+<section><title>Erts 5.5.5.3</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>Creating a named table using <c>ets:new/2</c> or
+ renaming a named table using <c>ets:rename/2</c> could in
+ rare circumstances succeed, meaning that there would be
+ two or more tables with the same name. Now such call will
+ fail with a <c>badarg</c> exception as it is supposed to
+ do.</p>
+ <p><c>ets:delete/1</c> used on a named table now removes
+ the name immediately so that a new table with the same
+ name can be created.</p>
+ <p>Turning on call trace on the internal BIF that
+ implements <c>ets:delete/1</c> would crash the
+ emulator.</p>
+ <p>SMP emulator only: Using <c>ets:rename/2</c> on a
+ table that <c>ets:safe_fixtable/2</c> has been used on
+ could cause an emulator crash or undefined behaviour
+ because of a missing lock.</p>
+ <p>
+ Own Id: OTP-6872 Aux Id: seq10756, seq10757 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 5.5.5.2</title>
+
+ <section><title>Known Bugs and Problems</title>
+ <list>
+ <item>
+ <p>
+ ets:select/3 on ordered_set and with a chunksize a
+ multiple of 1000 gave all elements instead of just 1000.
+ Also ets:slot/2 on ordered set could give unexpected
+ results on SMP emulator. Both problems are corrected.</p>
+ <p>
+ Own Id: OTP-6842</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 5.5.5.1</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ All exported functions in gzio.c have now been renamed to
+ avoid conflict with drivers that are indirectly linked
+ with an external zlib library.</p>
+ <p>
+ Own Id: OTP-6816 Aux Id: OTP-6591 </p>
+ </item>
+ <item>
+ <p>
+ Calling binary_to_term/1 with certain invalid binaries
+ would crash the emulator.</p>
+ <p>
+ Own Id: OTP-6817</p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Restored speed of bit-syntax matching of 32 bits
+ integers.</p>
+ <p>
+ Own Id: OTP-6789 Aux Id: seq10688 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+ <section>
+ <title>Erts 5.5.5</title>
+
+ <section>
+ <title>Fixed Bugs and Malfunctions</title>
+ <list type="bulleted">
+ <item>
+ <p>The functions in gzio.c have been renamed to avoid
+ conflict with drivers that indirectly linked with an
+ external zlib library.</p>
+ <p>Own Id: OTP-6591</p>
+ </item>
+ <item>
+ <p>The emulator without SMP support dumped core if an
+ async-thread finished a job after the emulator had begun
+ writing an <c><![CDATA[erl_crash.dump]]></c>. </p>
+ <p>Own Id: OTP-6685</p>
+ </item>
+ <item>
+ <p>In bit syntax matching, integer fields with greater
+ size than 16Mb would fail to match. (Thanks to Bertil
+ Karlsson and Francesco Pierfederici.)</p>
+ <p>Matching out a 32-bit integer not aligned on a byte
+ boundary from a binary could cause an heap overflow (and
+ subsequent termination of the emulator).</p>
+ <p>A module that contained bit syntax construction with a
+ literal field size greater than 16Mb would fail to
+ load.</p>
+ <p>Several other similar bugs having to do with huge
+ field sizes were eliminated.</p>
+ <p>Attempting to construct a binary longer than 536870911
+ bytes will now fail with a <c><![CDATA[system_limit]]></c> exception
+ (rather than fail in mysterious ways or construct an
+ binary with incorrect contents). Similarily, attempting
+ to match a binary longer than 536870911 bytes will now
+ fail (instead of producing an incorrect result). This
+ limitation has been documented in the Efficiency Guide.
+ (The limit is in the 32-bit emulator; use the 64-bit
+ emulator if you need to handle larger binaries than
+ 536870911.)</p>
+ <p>Own Id: OTP-6686</p>
+ </item>
+ <item>
+ <p>Bugs in rem and div of very large numbers are corrected.</p>
+ <p>Own Id: OTP-6692</p>
+ </item>
+ <item>
+ <p><c><![CDATA[erlang:system_info({allocator, Alloc})]]></c> didn't
+ allocate enough heap when a bignum was part of the result
+ which could cause an emulator crash.</p>
+ <p>Own Id: OTP-6693</p>
+ </item>
+ <item>
+ <p>It was previously not possible to pass
+ <c><![CDATA[erts_alloc]]></c> the same configuration via the
+ command-line, as used by default. </p>
+ <p>A <c><![CDATA[+M*]]></c> command-line argument that configure a
+ size of some sort can now be passed a value that equals
+ the size of the address space. The value used, in this
+ case, will be <c><![CDATA["the size of the address space" - 1]]></c>.</p>
+ <p>Own Id: OTP-6699</p>
+ </item>
+ <item>
+ <p><c><![CDATA[SysIOVec* driver_peekq(ErlDrvPort port, int *vlen)]]></c> did not update <c><![CDATA[*vlen]]></c> if <c><![CDATA[port]]></c> was
+ invalid. <c><![CDATA[*vlen]]></c> is now set to <c><![CDATA[-1]]></c> if the
+ <c><![CDATA[port]]></c> is invalid.</p>
+ <p>The <c><![CDATA[efile]]></c> driver
+ expects <c><![CDATA[*vlen]]></c> to be updated also when the
+ <c><![CDATA[port]]></c> is invalid. This situation occurs seldom, but
+ when the runtime system has async-threads enabled and
+ ports are killed it can. When it occurred the runtime
+ system crashed.</p>
+ <p>Own Id: OTP-6729</p>
+ </item>
+ </list>
+ </section>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>For scripts written using <c><![CDATA[escript]]></c>, there is a new
+ function <c><![CDATA[escript:script_name/0]]></c>, which can be used
+ to retrieve the pathame of the script. The documentation
+ has been clarified regarding pre-defined macros such as
+ ?MODULE and the module name.</p>
+ <p>Own Id: OTP-6593</p>
+ </item>
+ <item>
+ <p>The section Guards in the chapter The Abstract Format
+ of the ERTS User's Guide has been updated.</p>
+ <p>Own Id: OTP-6600</p>
+ </item>
+ <item>
+ <p>Corrected protocol layer flue for socket options
+ SO_LINGER, SO_SNDBUF and SO_RCVBUF, for SCTP.</p>
+ <p>Own Id: OTP-6625 Aux Id: OTP-6336 </p>
+ </item>
+ <item>
+ <p>The behaviour of the inet option {active,once} on peer
+ close is improved and documented.</p>
+ <p>Own Id: OTP-6681</p>
+ </item>
+ <item>
+ <p>The inet option send_timeout for connection oriented
+ sockets is added to allow for timeouts in communicating
+ send requests to the underlying TCP stack.</p>
+ <p>Own Id: OTP-6684 Aux Id: seq10637 OTP-6681 </p>
+ </item>
+ <item>
+ <p>The command line flag <c><![CDATA[-args_file FileName]]></c>, and
+ the environment variables <c><![CDATA[ERL_AFLAGS]]></c>, and
+ <c><![CDATA[ERL_ZFLAGS]]></c> for the <c><![CDATA[erl]]></c> command have been
+ added. For more information see the <c><![CDATA[erl(1)]]></c>
+ documentation.</p>
+ <p>Own Id: OTP-6697</p>
+ </item>
+ <item>
+ <p>The <c><![CDATA[is_constant/1]]></c> type test has been deprecated.
+ <c><![CDATA[is_constant/1]]></c> is improperly named and almost
+ entirely undocumented.</p>
+ <p>Own Id: OTP-6731</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>Erts 5.5.4.3</title>
+
+ <section>
+ <title>Fixed Bugs and Malfunctions</title>
+ <list type="bulleted">
+ <item>
+ <p><c><![CDATA[process_flag(trap_exit, Bad)]]></c> where <c><![CDATA[Bad]]></c>
+ was a term not equal to <c><![CDATA[true]]></c> or <c><![CDATA[false]]></c>,
+ didn't fail with <c><![CDATA[badarg]]></c> as it should; instead, the
+ failure was silently ignored. This bug was introduced in
+ <c><![CDATA[erts-5.5.2]]></c>.</p>
+ <p>Own Id: OTP-6627 Aux Id: OTP-6160 </p>
+ </item>
+ <item>
+ <p>The minimum and default stack size for async-threads has
+ been increased to 16 kilowords. This since the previous
+ minimum and default stack size of 8 kilowords proved to
+ be too small (introduced in <c><![CDATA[erts-5.5.4.2]]></c>).</p>
+ <p>Own Id: OTP-6628 Aux Id: OTP-6580, Seq10633 </p>
+ </item>
+ </list>
+ </section>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>process_flag/2 accepts the new flag <c><![CDATA[sensitive]]></c>.</p>
+ <p>Own Id: OTP-6592 Aux Id: seq10555 </p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>Erts 5.5.4.2</title>
+
+ <section>
+ <title>Fixed Bugs and Malfunctions</title>
+ <list type="bulleted">
+ <item>
+ <p>When a port steals control over a file descriptor from
+ another port, the stealing port tests if the other port
+ is alive. This in order to be able to give an accurate
+ error message. In the runtime system with SMP support,
+ this test was done without appropriate locks held. This
+ could in worst case lead to an erroneous error message;
+ therefore, this bug is to be considered harmless.</p>
+ <p>Own Id: OTP-6602</p>
+ </item>
+ </list>
+ </section>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>The default stack size for threads in the async-thread
+ pool has been shrunk to 8 kilowords, i.e., 32 KB on
+ 32-bit architectures. This small default size has been
+ chosen since the amount of async-threads might be quite
+ large. The default stack size is enough for drivers
+ delivered with Erlang/OTP, but might not be sufficiently
+ large for other dynamically linked in drivers that use
+ the <c><![CDATA[driver_async()]]></c> functionality. A suggested
+ stack size for threads in the async-thread pool can be
+ configured via the <c><![CDATA[+a]]></c> command line argument of
+ <c><![CDATA[erl(1)]]></c>.</p>
+ <p>*** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>Own Id: OTP-6580</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>Erts 5.5.4.1</title>
+
+ <section>
+ <title>Fixed Bugs and Malfunctions</title>
+ <list type="bulleted">
+ <item>
+ <p>Setting the time on the system while using heart on a
+ linux machine where the emulator was built with
+ clock_gettime support (default from Linux 2.6/erts-5.5.4
+ and upwards), could make the heart command fire. This was
+ due to bug in the heart executable which is now
+ corrected.</p>
+ <p>Own Id: OTP-6598 Aux Id: seq10614 </p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>Erts 5.5.4</title>
+
+ <section>
+ <title>Fixed Bugs and Malfunctions</title>
+ <list type="bulleted">
+ <item>
+ <p>Corrected misspelling of '<c><![CDATA[-pz]]></c>' in the help text
+ for <c><![CDATA[erlc]]></c>. (Thanks to Ulf Wiger.)</p>
+ <p>Own Id: OTP-6433</p>
+ </item>
+ <item>
+ <p>The MD5 calculation of a BEAM file done by
+ <c><![CDATA[code:module_md5/1]]></c>, <c><![CDATA[beam_lib:md5/1]]></c>, and by
+ the compiler for the default value of the <c><![CDATA[vsn]]></c>
+ attribute have all been changed so that its result will
+ be the same on all platforms; modules containing funs
+ could get different MD5s on different platforms.</p>
+ <p>Own Id: OTP-6459</p>
+ </item>
+ <item>
+ <p>The emulator could dump core while writing an
+ <c><![CDATA[erl_crash.dump]]></c> file if there were funs with a
+ large terms in its environment. Since there is no way to
+ inspect a fun's environment in the crashdump_viewer
+ application anyway, a variables in the environment are
+ now set to [] before dumping the fun. (Thanks to
+ Jean-Sebastien Pedron.)</p>
+ <p>Own Id: OTP-6504</p>
+ </item>
+ <item>
+ <p><c><![CDATA[{Port, {exit_status, S}}]]></c> messages from ports
+ opened with the <c><![CDATA[exit_status]]></c> option could under
+ rare circumstances be delayed. This bug was present on
+ Erlang runtime systems without SMP support on all unix
+ operating systems other than SunOS.</p>
+ <p>Own Id: OTP-6528</p>
+ </item>
+ <item>
+ <p>A bug in linuxthreads could cause the emulator to dump
+ core when dlerror() was called before the first call to
+ dlopen(). As a workaround the emulator always makes a
+ call to dlopen() on initialization when linuxthreads is
+ used as thread library.</p>
+ <p>Own Id: OTP-6530</p>
+ </item>
+ <item>
+ <p>file:sync/1 did not do anything on Windows. Now it calls
+ the system function for flushing buffers
+ (FlushFileBuffers()). (Thanks to Matthew Sackman.)</p>
+ <p>Own Id: OTP-6531</p>
+ </item>
+ <item>
+ <p><c><![CDATA[open_port/2]]></c> could on the runtime system with SMP
+ support fail with the wrong exit reason when a port
+ couldn't be created. When this happened the exit reason
+ was typically <c><![CDATA[eintr]]></c>, or <c><![CDATA[ebusy]]></c> instead of
+ <c><![CDATA[eagain]]></c>.</p>
+ <p>Own Id: OTP-6536</p>
+ </item>
+ <item>
+ <p>The file driver (efile_drv) did not flush data written
+ using the option 'delayed_write' after the set timeout
+ time, rather at the next file operation. This bug has now
+ been corrected.</p>
+ <p>Own Id: OTP-6538</p>
+ </item>
+ </list>
+ </section>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>An interface towards the SCTP Socket API Extensions
+ has been implemented.It is an Open Source patch courtesy
+ of Serge Aleynikov and Leonid Timochouk. The Erlang code
+ parts has been adapted by the OTP team, changing the
+ Erlang API somewhat.</p>
+ <p>The Erlang interface consists of the module
+ <c><![CDATA[gen_sctp]]></c> and an include file
+ <c><![CDATA[-include_lib("kernel/include/inet_sctp.hrl").]]></c> for
+ option record definitions. The <c><![CDATA[gen_sctp]]></c> module is
+ documented.</p>
+ <p>The delivered Open Source patch, before the OTP team
+ rewrites, was written according to
+ http://tools.ietf.org/html/draft-ietf-tsvwg-sctpsocket-13
+ and was claimed to work fine, tested on Linux Fedora Core
+ 5.0 (kernel 2.6.15-2054 or later) and on Solaris 10 and
+ 11. The OTP team rewrites used the same standard document
+ but might have accidentally broken some functionality. If
+ so it will soon be patched to working state. The tricky
+ parts in C and the general design has essentially not
+ changed. During the rewrites the code was hand tested on
+ SuSE Linux Enterprise Server 10, and briefly on Solaris
+ 10. Feedbach on code and docs is very much
+ appreciated.</p>
+ <p>The SCTP interface is in beta state. It has only been
+ hand tested and has no automatic test suites in OPT
+ meaning everything is most certainly not tested. Socket
+ active mode is broken. IPv6 is not tested. The
+ documentation has been reworked due to the API changes,
+ but has not been proofread after this.</p>
+ <p>Thank you from the OTP team to Serge Aleynikov and
+ Leonid Timochouk for a valuable contribution. We hope we
+ have not messed it up too much.</p>
+ <p>Own Id: OTP-6336</p>
+ </item>
+ <item>
+ <p>A <c><![CDATA[{minor_version,Version}]]></c> option is now recognized
+ by <c><![CDATA[term_to_binary/2]]></c>. {minor_version,1} will cause
+ floats to be encoded in an exact and more space-efficient
+ way compared to the previous encoding.</p>
+ <p>Own Id: OTP-6434</p>
+ </item>
+ <item>
+ <p>There is a new <c><![CDATA[escript]]></c> program that can be used
+ for writing scripts in Erlang. Erlang scripts don't need
+ to be compiled and any arguments can be passed to them
+ without risk that they are interpreted by the Erlang
+ system.</p>
+ <p>Own Id: OTP-6505</p>
+ </item>
+ <item>
+ <p>Setting and getting socket options in a "raw" fashion is
+ now allowed. Using this feature will inevitably produce
+ non portable code, but will allow setting ang getting
+ arbitrary uncommon options on TCP stacks that do have
+ them.</p>
+ <p>Own Id: OTP-6519</p>
+ </item>
+ <item>
+ <p>Miscellaneous signal handling improvements on the Erlang
+ runtime system with SMP support.</p>
+ <p>The fallback implementation of spin locks and atomic
+ operations are now implemented using pthread spin locks
+ when pthread spin locks are found on the system.</p>
+ <p>The Erlang runtime system with SMP support can now run on
+ Linux systems that has Linuxthreads instead of NPTL
+ (Native POSIX Thread Library). Note that the SMP support
+ hasn't been as thoroughly tested with Linuxthreads as
+ with NPTL. A runtime system with SMP support will
+ therefore not be built by default on Linux when NPTL
+ isn't found. In order to force a build of the runtime
+ system with SMP support, pass <c><![CDATA[--enable-smp-support]]></c>
+ to <c><![CDATA[configure]]></c> when building OTP.</p>
+ <p>Own Id: OTP-6525</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>Erts 5.5.3.1</title>
+
+ <section>
+ <title>Fixed Bugs and Malfunctions</title>
+ <list type="bulleted">
+ <item>
+ <p><c><![CDATA[erlang:system_flag(multi_scheduling, block)]]></c> could
+ cause the emulator with SMP support to deadlock.</p>
+ <p>Own Id: OTP-6431 Aux Id: OTP-6403 </p>
+ </item>
+ <item>
+ <p>The runtime system with SMP support failed to call the
+ driver timeout callback of ports in state closing. This
+ could cause ports to fail flushing their I/O queues.</p>
+ <p>Own Id: OTP-6432</p>
+ </item>
+ <item>
+ <p>The <c><![CDATA[{Port, closed}]]></c> message from a closed port
+ could arrive at the port owner before <c><![CDATA[Port]]></c> had
+ been removed from the result of <c><![CDATA[erlang:ports/0]]></c> in
+ the runtime system with SMP support.</p>
+ <p>Own Id: OTP-6437</p>
+ </item>
+ <item>
+ <p>The async id of async jobs created via
+ <c><![CDATA[driver_async]]></c> wasn't created in a thread safe
+ manner in the runtime system with SMP support. This could
+ in worst case cause <c><![CDATA[driver_async_cancel()]]></c> to
+ cancel another async job than intended.</p>
+ <p>Own Id: OTP-6438</p>
+ </item>
+ <item>
+ <p>Under rare circumstances a terminating connection between
+ two nodes could cause an instantaneous reconnect between
+ the two nodes to fail on the runtime system with SMP
+ support.</p>
+ <p>Own Id: OTP-6447</p>
+ </item>
+ <item>
+ <p>In the documentation of the driver entry field
+ <c><![CDATA[extended_marker]]></c> of erts version 5.5.3
+ (<c><![CDATA[driver_entry(3)]]></c>), the following is stated: "The
+ following fields are ignored if this field is equal to
+ <c><![CDATA[0]]></c>". This is a documentation bug and has been
+ changed to: "If this field is equal to <c><![CDATA[0]]></c>, all the
+ fields following this field also <em>have</em> to be
+ <c><![CDATA[0]]></c>, or <c><![CDATA[NULL]]></c> in case it is a pointer field".</p>
+ <p>The runtime check for detection of old incompatible
+ drivers made when loading drivers has been improved. The
+ emulator can, however, not make sure that a driver that
+ doesn't use the extended driver interface isn't
+ incompatible. Therefore, when loading a driver that
+ doesn't use the extended driver interface, there is a
+ risk that it will be loaded also when the driver is
+ incompatible. When the driver use the extended driver
+ interface, the emulator can verify that it isn't of an
+ incompatible driver version. You are therefore advised to
+ use the extended driver interface.</p>
+ <p>For more information see the <c><![CDATA[erl_driver(3)]]></c> and
+ <c><![CDATA[driver_entry(3)]]></c> documentation.</p>
+ <p>Own Id: OTP-6452 Aux Id: OTP-6330 </p>
+ </item>
+ <item>
+ <p>When terminating ports on the runtime system with SMP
+ support, removal of links to processes was done without
+ locking the link lock on processes. This could cause an
+ emulator crash.</p>
+ <p>Own Id: OTP-6475</p>
+ </item>
+ <item>
+ <p>The emulator with SMP support could crash when a port
+ flushed its I/O queue by calling <c><![CDATA[driver_async()]]></c>
+ from the timeout driver callback.</p>
+ <p>Own Id: OTP-6479</p>
+ </item>
+ <item>
+ <p>Large exit reasons could under rare circumstances cause
+ the runtime system with SMP support to crash.</p>
+ <p>Own Id: OTP-6521</p>
+ </item>
+ </list>
+ </section>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>Faster system calls for keeping the time accurate are
+ used on newer Linux kernels, which can result in a
+ significant speed-up of the emulator on those systems.</p>
+ <p>Own Id: OTP-6430</p>
+ </item>
+ <item>
+ <p>Added number of async threads and number of scheduler
+ threads to the system information that can be retrieved
+ via <c><![CDATA[driver_system_info()]]></c>. For more information see
+ the <c><![CDATA[erl_driver(3)]]></c> documentation.</p>
+ <p>Own Id: OTP-6440</p>
+ </item>
+ <item>
+ <p>When <c><![CDATA[SIGUSR1]]></c> is received by the runtime system
+ with SMP support, the <c><![CDATA[erl_crash.dump]]></c> is now
+ written by a special thread, instead of as before
+ directly from the signal handler.</p>
+ <p>Own Id: OTP-6465</p>
+ </item>
+ <item>
+ <p>term_to_binary/2 with compression is now faster.</p>
+ <p></p>
+ <p>term_to_binary/2 now accepts the option
+ '<c><![CDATA[{compressed,Level}]]></c>' for specifying the
+ compression level. <c><![CDATA[Level]]></c> must be in the range 0
+ (no compression) through 9 (highest compression level).
+ Default is 6.</p>
+ <p>Future compatibility bugfix: binary_to_term/1 did not
+ handle the <c><![CDATA[Uniq]]></c> and <c><![CDATA[Index]]></c> fields
+ correctly.</p>
+ <p>Own Id: OTP-6494</p>
+ </item>
+ <item>
+ <p>Removed unnecessary reallocation when initializing
+ kernel-poll set.</p>
+ <p>Own Id: OTP-6516</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>Erts 5.5.3</title>
+
+ <section>
+ <title>Fixed Bugs and Malfunctions</title>
+ <list type="bulleted">
+ <item>
+ <p>Node and fun table entries could under rare circumstances
+ be deallocated multiple times on the emulator with SMP
+ support.</p>
+ <p>Own Id: OTP-6369</p>
+ </item>
+ <item>
+ <p>epoll_wait() can repeat entries for the same file
+ descriptor in the result array. This could cause the
+ ready_input, ready_output, or event callbacks of a driver
+ to unintentionally be called multiple times. We have only
+ noted repeated entries when an error condition has
+ occurred on the file descriptor. In this case, the
+ repeated entries should normally not be a problem for the
+ driver since it should detect the error and de-select the
+ file descriptor. Therefore this bug should be considered
+ harmless. The emulator now coalesce repeated entries into
+ one.</p>
+ <p>You are only affected by this bug if you are using
+ erts-5.5.2.* and the kernel-poll feature on linux.</p>
+ <p>Own Id: OTP-6376 Aux Id: OTP-6222 </p>
+ </item>
+ <item>
+ <p>If a process that was waiting in gen_tcp:accept/1 was
+ killed, calling gen_tcp:accept/1 again on the same listen
+ socket would fail with '<c><![CDATA[{error,einval}]]></c>'.</p>
+ <p>Own Id: OTP-6381 Aux Id: seq10535 </p>
+ </item>
+ <item>
+ <p>The emulator failed to start on Solaris 10 when
+ kernel-poll support was enabled and the maximum number of
+ filedescriptors configured was less than or equal to 256.</p>
+ <p>Own Id: OTP-6384 Aux Id: OTP-6222 </p>
+ </item>
+ <item>
+ <p>The R10B compiler could generate unsafe
+ <c><![CDATA[bs_save/bs_restore]]></c> instructions that could cause
+ memory corruption. (The R11B compiler does not have that
+ problem.) The erlang emulator will now refuse to load
+ R10B-compiled modules that contain such unsafe
+ <c><![CDATA[bs_save/bs_restore]]></c> instructions. In addition, the
+ beam_validator module in the compiler will also reject
+ such instructions (in case it is used to validate R10B
+ code). (Thanks to Matthew Reilly.)</p>
+ <p>Own Id: OTP-6386</p>
+ </item>
+ <item>
+ <p>Process and port timers could fail to work properly on
+ the runtime system with SMP support. Many thanks to
+ Dmitriy Kargapolov and Serge Aleynikov who tracked down
+ this bug.</p>
+ <p>Own Id: OTP-6387</p>
+ </item>
+ <item>
+ <p>Bit syntax code compiled by an R10B compiler that matched
+ out a floating point number would not properly check that
+ the floating point number was valid; if the float was,
+ for instance, NaN the emulator could crash.</p>
+ <p>Own Id: OTP-6395</p>
+ </item>
+ <item>
+ <p>statistics(runtime) on Windows used to return the elapsed
+ system time for the process, instead of the user time.
+ Corrected. (Thanks to Robert Virding.)</p>
+ <p>Own Id: OTP-6407</p>
+ </item>
+ <item>
+ <p>A loadable driver (loaded by erl_ddll) which used
+ driver_async() would cause the emulator to crash. (Thanks
+ to Dmitriy Kargapolov.)</p>
+ <p>Own Id: OTP-6410</p>
+ </item>
+ <item>
+ <p>Under rare circumstances the emulator on unix platforms
+ could fail to terminate the Erlang port corresponding to
+ a port program opened with the <c><![CDATA[exit_status]]></c> option.</p>
+ <p>Own Id: OTP-6411</p>
+ </item>
+ <item>
+ <p>A link removed via <c><![CDATA[unlink/1]]></c> could under rare
+ circumstances transfer exit signals for a short period of
+ time after the call to <c><![CDATA[unlink/1]]></c> had returned when
+ the runtime system with SMP support was used.</p>
+ <p>Own Id: OTP-6425 Aux Id: OTP-6160 </p>
+ </item>
+ </list>
+ </section>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>In the runtime system with SMP support, ports are now
+ being scheduled on the scheduler threads interleaved with
+ processes instead of being run in a separate I/O thread.</p>
+ <p>Own Id: OTP-6262</p>
+ </item>
+ <item>
+ <p>More interfaces are added in erl_ddll, to support
+ different usage scenarios.</p>
+ <p>Own Id: OTP-6307 Aux Id: OTP-6234 </p>
+ </item>
+ <item>
+ <p>In the runtime system with SMP support, the global
+ I/O lock has been replaced with a more fine grained port
+ locking scheme. Port locking is either done on driver
+ level, i.e., all ports executing the same driver share a
+ lock, or on port level, i.e., each port has its own lock.
+ Currently the inet driver, the efile driver, and the
+ spawn driver use port level locking and all other
+ statically linked in drivers use driver level locking. By
+ default dynamically linked in drivers will use locking on
+ driver level. For more information on how to enable port
+ level locking see the <c><![CDATA[erl_driver(3)]]></c> and the
+ <c><![CDATA[driver_entry(3)]]></c> man pages. </p>
+ <p>As of erts
+ version 5.5.3 the driver interface has been extended. The
+ extended interface introduce version management, the
+ possibility to pass capability flags to the runtime
+ system at driver initialization, and some new driver API
+ functions. For example, the <c><![CDATA[driver_system_info()]]></c>
+ function which can be used to determine if the driver is
+ run in a runtime system with SMP support or not. The
+ extended interface doesn't have to be used, <em>but</em>
+ dynamically linked in driver <em>have</em> to be
+ recompiled. For information see the <c><![CDATA[erl_driver(3)]]></c>
+ and the <c><![CDATA[driver_entry(3)]]></c> man pages. </p>
+ <p><em>NOTE:</em> Dynamically linked in drivers
+ <em>have</em> to be recompiled. </p>
+ <p>*** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>Own Id: OTP-6330 Aux Id: OTP-6262 </p>
+ </item>
+ <item>
+ <p>A test and debug feature which modifies the timing of the
+ runtime system has been added. For more information, see
+ documentation of the <c><![CDATA[+T<Level>]]></c> command line
+ argument of <c><![CDATA[erl(1)]]></c>.</p>
+ <p>Own Id: OTP-6382</p>
+ </item>
+ <item>
+ <p>The version of zlib (http://zlib.net) linked into
+ run-time system has been updated to version 1.2.3.</p>
+ <p>Own Id: OTP-6394</p>
+ </item>
+ <item>
+ <p>The <c><![CDATA[erlc]]></c> program now passes on the <c><![CDATA[-smp]]></c>
+ and <c><![CDATA[-hybrid]]></c> options to the Erlang emulator it
+ starts. This is mainly useful for compiling native code,
+ because native code must be compiled with same type of
+ run-time system as in which it will be run.</p>
+ <p>If the <c><![CDATA[-s]]></c> option is given, <c><![CDATA[erlc]]></c> now
+ prints a warning that it is deprecated and that it will
+ be removed in R12B.</p>
+ <p>Own Id: OTP-6398</p>
+ </item>
+ <item>
+ <p>The <c><![CDATA[schedulers]]></c> option of
+ <c><![CDATA[erlang:system_flag/2]]></c> has been removed, i.e., the
+ number of scheduler threads cannot be changed after
+ emulator boot time any more.</p>
+ <p>A <c><![CDATA[multi_scheduling]]></c> option has been added to
+ <c><![CDATA[erlang:system_flag/2]]></c>. This option can be used for
+ blocking and unblocking multi-scheduling. For more
+ information see the <c><![CDATA[erlang(3)]]></c> documentation.</p>
+ <p>Own Id: OTP-6403</p>
+ </item>
+ <item>
+ <p>A port program that had been started with the
+ <c><![CDATA[exit_status]]></c> option and closed one of the pipes
+ used for communication with the emulator caused the
+ emulator to continuously poll for termination of the port
+ program. This only became a problem when the emulator
+ didn't have other things to do and the port program
+ closed a pipe much earlier than it terminated. When the
+ emulator had other things to do, such as running Erlang
+ processes, the emulator polled for termination in between
+ scheduling of processes.</p>
+ <p>Now the emulator doesn't poll for termination of the port
+ program at all; instead, it waits for the child signal
+ from the terminated port program to arrive and then
+ schedules the Erlang port for termination.</p>
+ <p>The termination of any port programs have also been
+ optimized. Previously the termination of any port program
+ did always cause a scan of a table of the size equal to
+ maximum number of file descriptors. If the maximum number
+ of file descriptors was large, this scan could be quite
+ expensive. Now the search have been reduced to the set of
+ ports started with the <c><![CDATA[exit_status]]></c> option.</p>
+ <p>Note, all of the above only applies to Erlang emulators
+ on Unix platforms.</p>
+ <p>Own Id: OTP-6412 Aux Id: seq10194 </p>
+ </item>
+ <item>
+ <p>* BEAM: added support for floating-point exceptions on
+ FreeBSD (32-bit x86)</p>
+ <p>* SMP: made locking procedures work even when native
+ lock operations aren't implemented</p>
+ <p>* SMP: improved timing accuracy in the timer thread
+ (if enabled)</p>
+ <p>Own Id: OTP-6424</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>Erts 5.5.2.2</title>
+
+ <section>
+ <title>Fixed Bugs and Malfunctions</title>
+ <list type="bulleted">
+ <item>
+ <p>A bug in the kernel poll implementation could cause the
+ emulator to omit polling for events on file descriptors.
+ The bug was only present when using the kernel poll
+ implementation based on epoll or kqueue. This bug was
+ introduced in erts-5.5.2.</p>
+ <p>Own Id: OTP-6344 Aux Id: OTP-6222 </p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>Erts 5.5.2.1</title>
+
+ <section>
+ <title>Fixed Bugs and Malfunctions</title>
+ <list type="bulleted">
+ <item>
+ <p>The run_erl program now acquires its pseudo-ttys using
+ openpty(3), so that it will work on newer Linux
+ distributions that don't have the traditional pseudo-tty
+ devices in the file system. On platforms that don't have
+ openpty(3), run_erl will still search for pseudo-tty
+ devices in the file system.</p>
+ <p>The run_erl program will now wait using waitpid(3) to
+ prevent the program it spawned to become defunct. run_erl
+ will also terminate after a delay of 5 seconds (to allow
+ any pending output to be written to the log file) if the
+ spawned program terminates even if some child of it still
+ holds stdin and/or stdout open.</p>
+ <p>Own Id: OTP-6225 Aux Id: seq10500 </p>
+ </item>
+ <item>
+ <p>A bug in ordered_set ETS datatyp caused ets:select (and
+ match) to return faulty results when the table contained
+ process id's from another node.</p>
+ <p>Own Id: OTP-6338</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>Erts 5.5.2</title>
+
+ <section>
+ <title>Fixed Bugs and Malfunctions</title>
+ <list type="bulleted">
+ <item>
+ <p>erlc: A typo in the help text for '-pa path' was
+ corrected.</p>
+ <p>Own Id: OTP-6218</p>
+ </item>
+ <item>
+ <p>Failure in port command/control driver callbacks could
+ crash the non-SMP emulator. This bug was introduced in
+ the 5.5 version of erts.</p>
+ <p>Own Id: OTP-6224</p>
+ </item>
+ <item>
+ <p>Erroneous "<c><![CDATA[Input driver gone away without deselecting!]]></c>" error reports could sometimes occur
+ when a driver instance terminated in the ready_output()
+ callback of the driver. This bug was only present in
+ emulators that used poll(). Note, that this bug was
+ harmless, the only effect it had was the erroneous error
+ report.</p>
+ <p>Own Id: OTP-6229 Aux Id: OTP-3993, Seq5266, Seq7247,
+ OTP-4307 </p>
+ </item>
+ <item>
+ <p>The emulator could cause a type assertion failure while
+ writing an erl_crash.dump, causing the erl_crash.dump to
+ be terminated and a core dump generated.</p>
+ <p>Own Id: OTP-6235 Aux Id: seq10444 </p>
+ </item>
+ <item>
+ <p>The registered name of a process is now the last
+ observable resource removed before links and monitors are
+ triggered when a process terminates.</p>
+ <p>Previously ets tables were removed after the registered
+ name. This could cause problems on the runtime system
+ with SMP support for code that expected that ets tables
+ owned by a specific process had been removed if the name
+ of the process had been removed.</p>
+ <p>Own Id: OTP-6237</p>
+ </item>
+ <item>
+ <p>Failure to fork() a new (os) process could cause the
+ emulator to deadlock. This bug affect all emulators with
+ SMP support, and emulators with async thread support on
+ SunOS.</p>
+ <p>Own Id: OTP-6241 Aux Id: OTP-3906 </p>
+ </item>
+ <item>
+ <p>Fprof traces could become truncated for the SMP emulator.
+ This bug has now been corrected.</p>
+ <p>Own Id: OTP-6246</p>
+ </item>
+ <item>
+ <p>The undocumented functions inet:getiflist/0,1
+ inet:ifget/2,3 and inet:getif/1 were completely broken on
+ Windows. That has been fixed.</p>
+ <p>Own Id: OTP-6255</p>
+ </item>
+ <item>
+ <p>Behavior in case of disappeared nodes when using the
+ dist_auto_connect once got changed in R11B-1. The
+ timeouts regarding normal distributed operations is now
+ reverted to the old (pre R11B-1).</p>
+ <p>Own Id: OTP-6258 Aux Id: OTP-6200, seq10449 </p>
+ </item>
+ <item>
+ <p>The bsl and bsr operators could cause the emulator to
+ crash if given invalid arguments. (Thanks to datacompboy
+ and Per Gustafsson.)</p>
+ <p>Own Id: OTP-6259</p>
+ </item>
+ <item>
+ <p>driver_cancel_timer() could under certain circumstances
+ fail to cancel the timer on the runtime system with SMP
+ support.</p>
+ <p>Own Id: OTP-6261</p>
+ </item>
+ <item>
+ <p>A call to erlang:system_info(info) could deadlock the
+ runtime system with SMP support.</p>
+ <p>Own Id: OTP-6268</p>
+ </item>
+ </list>
+ </section>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>Exit signals are now truly asynchronous in the runtime
+ system with SMP support. This simplifies locking in bifs
+ a lot, and makes process termination cheaper.</p>
+ <p>Own Id: OTP-6160</p>
+ </item>
+ <item>
+ <p>When tracing on the runtime system with SMP support it
+ can be difficult to know when a trace has been delivered
+ to the tracer. A new built in function
+ <c><![CDATA[erlang:trace_delivered/1]]></c> has been introduced in
+ order to make it easier to know when the trace has been
+ delivered. See the erlang(3) man page for more
+ information.</p>
+ <p>Own Id: OTP-6205 Aux Id: OTP-6269 </p>
+ </item>
+ <item>
+ <p>Kernel poll support can now be combined with SMP support.
+ Currently the following kernel poll versions exist:
+ <c><![CDATA[/dev/poll]]></c>, <c><![CDATA[epoll]]></c>, and <c><![CDATA[kqueue]]></c>. Linux
+ <c><![CDATA[kpoll]]></c> has been replaced with <c><![CDATA[epoll]]></c>. Some
+ time in the future there will also be a kernel poll
+ version using Solaris event ports.</p>
+ <p>The "check io" implementation for unix has been
+ completely rewritten. The current kernel poll
+ implementation reduce the amount of system calls needed
+ compared to the old kernel poll implementation.</p>
+ <p>When <c><![CDATA[epoll]]></c> or <c><![CDATA[kqueue]]></c> is used either
+ <c><![CDATA[poll]]></c> or <c><![CDATA[select]]></c> is used as fallback.
+ Previously only <c><![CDATA[poll]]></c> could be used as fallback.
+ Since <c><![CDATA[select]]></c> now can be used as fallback, kernel
+ poll support is now also available on newer MacOSX. Note
+ however, when <c><![CDATA[select]]></c> is used as fallback, the
+ maximum number of file descriptors is limited to
+ <c><![CDATA[FD_SETSIZE]]></c>. </p>
+ <p>Kernel poll support is now enabled by default if
+ <c><![CDATA[/dev/poll]]></c>, <c><![CDATA[epoll]]></c>, or <c><![CDATA[kqueue]]></c> is found
+ when building OTP, i.e. you do not have to pass the
+ <c><![CDATA[--enable-kernel-poll]]></c> argument to <c><![CDATA[configure]]></c>.
+ As before, kernel poll is disabled by default in the
+ runtime system. In order to enable it, pass the
+ <c><![CDATA[+Ktrue]]></c> command line argument to <c><![CDATA[erl]]></c>.</p>
+ <p>Note: <c><![CDATA[configure]]></c> will refuse to enable kernel poll
+ support on FreeBSD since <c><![CDATA[kqueue]]></c> have problems with
+ (at least) pipes on all version of FreeBSD that we have
+ tested.</p>
+ <p>Own Id: OTP-6222 Aux Id: seq10380 </p>
+ </item>
+ <item>
+ <p>The <c><![CDATA[erl_ddll]]></c> module and the code in the emulator
+ have been completely rewritten; several bugs were fixed.</p>
+ <p>Own Id: OTP-6234</p>
+ </item>
+ <item>
+ <p>The SMP emulator now avoids locking for the following
+ operations (thus making them as fast as in the UP
+ emulator): <c><![CDATA[atom_to_list/1]]></c>, atom comparison, atom
+ hashing, <c><![CDATA[erlang:apply/3]]></c>.</p>
+ <p>Own Id: OTP-6252</p>
+ </item>
+ <item>
+ <p>There are new BIFs <c><![CDATA[erlang:spawn_monitor/1,3]]></c>,
+ and the new option <c><![CDATA[monitor]]></c> for
+ <c><![CDATA[spawn_opt/2,3,4,5]]></c>.</p>
+ <p>The <c><![CDATA[observer_backend]]></c> module has been updated to
+ handle the new BIFs.</p>
+ <p>Own Id: OTP-6281</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>Erts 5.5.1.1</title>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>There is now an option read_packets for UDP sockets that
+ sets the maximum number of UDP packets that will be read
+ for each invocation of the socket driver.</p>
+ <p>Own Id: OTP-6249 Aux Id: seq10452 </p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>Erts 5.5.1</title>
+
+ <section>
+ <title>Fixed Bugs and Malfunctions</title>
+ <list type="bulleted">
+ <item>
+ <p>Complex pattern matching of strings would fail in the 64
+ bits emulator because of a bug in the loader. (Thanks to
+ Igor Goryachev.)</p>
+ <p>Own Id: OTP-6142</p>
+ </item>
+ <item>
+ <p><c><![CDATA[-134217728 div 134217728]]></c> and <c><![CDATA[-134217728 rem 134217728]]></c> would be calculated incorrectly.
+ <c><![CDATA[abs(-2147483648)]]></c> could in unlucky circumstances
+ cause a heap overflow, as could size(Binary) when size of
+ the binary was larger than 128Mb.</p>
+ <p>Own Id: OTP-6154</p>
+ </item>
+ <item>
+ <p>erlang:display/1 displayed erroneous values for negative
+ integers.</p>
+ <p>Big integers (both positive and negative) were previously
+ displayed in hexadecimal form while small integers were
+ displayed in decimal form. All integers are now displayed
+ in decimal form.</p>
+ <p>NOTE: erlang:display/1 should only be used for debugging.</p>
+ <p>Own Id: OTP-6156</p>
+ </item>
+ <item>
+ <p>A call to erlang:trace/3 with erroneous flags caused the
+ SMP emulator to deadlock instead of exiting the calling
+ process with badarg.</p>
+ <p>Own Id: OTP-6175</p>
+ </item>
+ <item>
+ <p>A bug causing the emulator to hang when exiting a process
+ that is exception traced has been fixed.</p>
+ <p>Own Id: OTP-6180</p>
+ </item>
+ <item>
+ <p>ets:rename/1 could deadlock, or crash the SMP emulator
+ when the table wasn't a named table.</p>
+ <p>ets:next/2, and ets:prev/2 could return erroneous results
+ on the SMP emulator.</p>
+ <p>Own Id: OTP-6198 Aux Id: seq10392, seq10415 </p>
+ </item>
+ <item>
+ <p>A memory allocation bug could cause the SMP emulator to
+ crash when a process had executed a <c><![CDATA[receive after]]></c>
+ with a larger timeout than 10 minutes.</p>
+ <p>Own Id: OTP-6199</p>
+ </item>
+ <item>
+ <p>The runtime system with SMP support did not slowly adjust
+ it's view of time when the system time suddenly changed.</p>
+ <p>Timeouts could sometimes timeout too early on the runtime
+ system with SMP support.</p>
+ <p>Own Id: OTP-6202</p>
+ </item>
+ </list>
+ </section>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>The smp runtime system now automatically detects the
+ number of logical processors on MacOSX (darwin) and
+ OpenBSD.</p>
+ <p>The smp runtime system is now built by default on MacOSX
+ (darwin) on x86.</p>
+ <p>Own Id: OTP-6119</p>
+ </item>
+ <item>
+ <p>The <c><![CDATA[-smp]]></c> command line argument now take the
+ following options: <c><![CDATA[enable]]></c>, <c><![CDATA[auto]]></c>, or
+ <c><![CDATA[disable]]></c>.</p>
+ <p>Especially the <c><![CDATA[-smpauto]]></c> argument is useful since
+ it starts the Erlang runtime system with SMP support if
+ it is available and more than one logical processor are
+ detected; otherwise, it starts the Erlang runtime system
+ without SMP support. For more information see the
+ <c><![CDATA[erl(1)]]></c> man page.</p>
+ <p>Own Id: OTP-6126</p>
+ </item>
+ <item>
+ <p>Increased the reduction cost for sending messages in the
+ SMP emulator so it behaves more like the non-SMP
+ emulator.</p>
+ <p>Own Id: OTP-6196</p>
+ </item>
+ <item>
+ <p>A port running a dynamically linked-in driver that exits
+ due to the driver being unloaded now exits with exit
+ reason <c><![CDATA[driver_unloaded]]></c>. Previously the port exited
+ with exit reason <c><![CDATA[-1]]></c>.</p>
+ <p>*** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>Own Id: OTP-6204</p>
+ </item>
+ <item>
+ <p>Changed name of the <c><![CDATA[erlang:system_info/1]]></c> argument
+ <c><![CDATA[scheduler]]></c> to <c><![CDATA[scheduler_id]]></c>. This since the
+ <c><![CDATA[scheduler]]></c> argument so easily could be mixed up
+ with the <c><![CDATA[schedulers]]></c> argument (both returning
+ integers).</p>
+ <p>*** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>Own Id: OTP-6208</p>
+ </item>
+ <item>
+ <p>The changes below were made by Mikael Pettersson, HiPE.</p>
+ <p>HiPE runtime system:</p>
+ <p>Reduce overheads in the HiPE runtime system's BIF glue
+ code.</p>
+ <p>Fix bug when exceptions are thrown from BEAM to HiPE.</p>
+ <p>Support SPARC on Linux.</p>
+ <p>Support x86 on FreeBSD.</p>
+ <p>Floating-point exceptions:</p>
+ <p>Reduce overheads in checking results of floating-point
+ operations.</p>
+ <p>Minor bug fix in SSE2 floating-point exception
+ handling.</p>
+ <p>Support SSE2 floating-point exceptions on 32-bit x86
+ machines.</p>
+ <p>Make FP exceptions work in the SMP runtime system on
+ FreeBSD/x86.</p>
+ <p>Support floating-point exceptions on SPARCs running
+ Linux.</p>
+ <p>Runtime system:</p>
+ <p>Minor scheduler optimisation in the non-SMP runtime
+ system.</p>
+ <p>Substantial reduction of I/O thread overheads in the
+ SMP runtime system if the separate timer thread is used.
+ (In R11B-1, the separate timer thread is not used.)</p>
+ <p>Own Id: OTP-6211</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>ERTS 5.5</title>
+
+ <section>
+ <title>Fixed Bugs and Malfunctions</title>
+ <list type="bulleted">
+ <item>
+ <p>Previously <c><![CDATA[unlink/1]]></c> and <c><![CDATA[erlang:demonitor/2]]></c>
+ behaved completely asynchronous. This had one undesirable
+ effect, though. You could never know when you were
+ guaranteed <em>not</em> to be affected by a link that you
+ had unlinked or a monitor that you had demonitored.</p>
+ <p>The new behavior of <c><![CDATA[unlink/1]]></c> and
+ <c><![CDATA[erlang:demonitor/2]]></c> can be viewed as two operations
+ performed atomically. Asynchronously send an unlink
+ signal or a demonitor signal, and ignore any future
+ results of the link or monitor.</p>
+ <p><em>NOTE</em>: This change can cause some obscure code
+ to fail which previously did not. For example, the
+ following code might hang:</p>
+ <code type="none"><![CDATA[
+ Mon = erlang:monitor(process, Pid),
+\011 %% ...
+\011 exit(Pid, bang),
+ erlang:demonitor(Mon),
+\011 receive
+\011 {'DOWN', Mon , process, Pid, _} -> ok
+\011 %% We were previously guaranteed to get a down message
+\011 %% (since we exited the process ourself), so we could
+\011 %% in this case leave out:
+\011 %% after 0 -> ok
+\011 end,
+ ]]></code>
+ <p>*** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>Own Id: OTP-5772</p>
+ </item>
+ <item>
+ <p>Two bugs fixed: If the environment variable <c><![CDATA[ERL_FLAGS]]></c>
+ was set, its contents would be appended to the end of the
+ command line even if the command line had an <c><![CDATA[-extra]]></c>
+ options. Changed to place the options from <c><![CDATA[ERL_FLAGS]]></c>
+ just before <c><![CDATA[-extra]]></c>. Also, the <c><![CDATA[-smp]]></c> and
+ <c><![CDATA[-hybrid]]></c> flags no longer have any effect if placed
+ after <c><![CDATA[-extra]]></c>.</p>
+ <p>Own Id: OTP-6054</p>
+ </item>
+ </list>
+ </section>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>The documentation for writing drivers in the ERTS User's
+ Guide has been expanded and updated.</p>
+ <p>Own Id: OTP-5192</p>
+ </item>
+ <item>
+ <p>The <c><![CDATA[andalso]]></c> and <c><![CDATA[orelse]]></c> operators are
+ now allowed to be used in guards. That also applies to
+ match specifications.</p>
+ <p>Own Id: OTP-5894 Aux Id: OTP-5149 </p>
+ </item>
+ <item>
+ <p>There is a new trace match spec function
+ <c><![CDATA[{exception_trace}]]></c> and a corresponding trace
+ message <c><![CDATA[exception_from]]></c> that can be used to trace
+ on any exit from a function, both normal function return
+ and exception return. See the documentation for
+ details.</p>
+ <p>The <c><![CDATA[return_to]]></c> trace message is now also
+ generated when the execution returns to a function due to
+ catching an exception.</p>
+ <p>Own Id: OTP-5956</p>
+ </item>
+ <item>
+ <p>Erlang runtime system with SMP (symmetric multi processing)
+ support.</p>
+ <p>The runtime system with SMP support is in this release
+ focused on stability and there are a number of steps
+ with optimizations to follow before it will take
+ full advantage of multi processor systems.
+ The released system is however truly multi threaded
+ and you will notice increased performance
+ for many applications already.
+ We recommend that you evaluate your application on
+ the SMP version of the runtime system and wait for some
+ more optimizations before you use it in a real product.
+ You will then discover if there are any problems in
+ your application that needs to be fixed in order for
+ it to work properly in a multi threaded environment.
+ More optimized versions of the runtime system
+ with SMP support will be included in the R11B
+ maintenance releases.</p>
+ <p>The SMP enabled runtime system will be started if
+ the <c><![CDATA[-smp]]></c> command line argument is passed to
+ the <c><![CDATA[erl]]></c> command. In order to make use of more than
+ one processor core, multiple scheduler threads are used. By
+ default, the number of scheduler threads will equal
+ the number of processor cores. The number of scheduler
+ threads can be set with the <c><![CDATA[+S]]></c> command line argument.
+ For more information see the <c><![CDATA[erl(1)]]></c> man page.</p>
+ <p>A runtime system with SMP support is by default built on
+ the following platforms if posix threads, and a gcc
+ compiler of at least version 2.95 is found:</p>
+ <list type="bulleted">
+ <item>
+ <p>Linux with at least kernel version 2.6 and the Native
+ POSIX Thread Library on x86, x86_64, and 32-bits
+ PowerPC.</p>
+ </item>
+ <item>
+ <p>Solaris of at least version 8 on 32-bits SPARC-V9.</p>
+ </item>
+ <item>
+ <p>MacOSX of at least version 10.4 (Darwin 8.0) on
+ 32-bits PowerPC.</p>
+ </item>
+ </list>
+ <p>The runtime system with SMP support is known <em>not</em>
+ to build on:</p>
+ <list type="bulleted">
+ <item>
+ <p>Windows.</p>
+ </item>
+ <item>
+ <p>Linux with kernel versions less than 2.4, or without
+ the Native POSIX Thread Library.</p>
+ </item>
+ <item>
+ <p>Other hardware platforms than x86, x86_64, 32-bits
+ SPARC-V9 and 32-bits PowerPC.</p>
+ </item>
+ </list>
+ <p>Windows will be supported in a future release.</p>
+ <p>The runtime system with SMP support might build on other
+ operating systems in combination with supported hardware.
+ In order to force a build of a runtime system with SMP
+ support, pass the <c><![CDATA[--enable-smp-support]]></c> command line
+ argument to configure. Note, however, that it is not enough
+ that it builds. The underlying thread library and operating
+ system has to provide SMP support as well. If the thread
+ library does not distribute scheduler threads over multiple
+ processor cores then the runtime system will only seemingly
+ provide SMP support. If the runtime system is not built by
+ default on a specific platform, we have <em>not</em> tested
+ it on that platform.</p>
+ <p><em>NOTE</em>: The design of SMP support for drivers is
+ ongoing. There will probably be incompatible driver
+ changes (only affecting drivers run on the runtime system
+ with SMP support) released as patches for R11B.</p>
+ <p><em>Potential incompatibility</em>: Previously, specific
+ driver call-backs were always called from the same thread.
+ This is <em>not</em> true in the runtime system with SMP
+ support. Calls to call-backs will be made from different
+ threads, e.g., two consecutive calls to exactly the same
+ call-back can be made from two different threads. This
+ will in <em>most</em> cases not be a problem. All calls
+ to call-backs are synchronized, i.e., only one call-back
+ will be called at a time.</p>
+ <p>In the future the default behavior will <em>probably</em>
+ be the following: Calls to call-backs will, as now, be
+ made from different threads. Calls to call-backs in the
+ same driver <em>instance</em> will be synchronized. It
+ will probably be possible to configure so that all calls
+ to call-backs in all driver instances of a specific
+ driver type will be synchronized. It may be possible to
+ configure so that all calls to call-backs of a driver
+ instance or a of a specific driver type will be made from
+ the same thread.</p>
+ <p>Parallelism in the Erlang code executed is a necessity
+ for the Erlang runtime system to be able to take
+ advantage of multi-core or multi-processor hardware.
+ There need to be at least as many Erlang processes
+ runnable as processor cores for the Erlang runtime system
+ to be able to take advantage of all processor cores.</p>
+ <p>An Erlang runtime system with SMP support with only one
+ Erlang process runnable all the time will almost always be
+ slower than the same Erlang runtime system without SMP
+ support. This is due to thread synchronization overhead.</p>
+ <p>Known major bottleneck in the Erlang runtime system:</p>
+ <list type="bulleted">
+ <item>
+ <p>Currently the I/O system uses one "big lock", i.e. only
+ one thread can do I/O at a time (with the exception of
+ async threads and threads created by users own linked-in
+ drivers). This is high on the list of things to
+ optimize. Note, code that does not do I/O can be executed
+ at the same time as one thread does I/O.</p>
+ </item>
+ </list>
+ <p>Some pitfalls which might cause Erlang programs that work on
+ the non-SMP runtime system to fail on the SMP runtime
+ system:</p>
+ <list type="bulleted">
+ <item>
+ <p>A newly spawned process will often begin executing
+ immediately. Code that expects that the parent process
+ will be able to execute for a while before the child
+ process begins executing is likely to fail.</p>
+ </item>
+ <item>
+ <p>High priority processes could previously provide
+ mutual exclusion (bad programming style) by preventing
+ normal and low priority processes from being run. High
+ priority processes cannot be used this way to provide
+ mutual exclusion.</p>
+ </item>
+ <item>
+ <p><c><![CDATA[erlang:yield()]]></c> could be used to provide some
+ kind of temporary mutual exclusion (also bad programming
+ style). <c><![CDATA[erlang:yield()]]></c> cannot be used to provide
+ any kind of mutual exclusion.</p>
+ </item>
+ <item>
+ <p>Obscure pitfall, only if a process being traced also
+ sends normal messages to the tracer:<br></br>
+ &nbsp;&nbsp;The order between trace messages and normal
+ messages is undefined. I.e. the order between normal
+ messages sent from a tracee to a tracer and the trace
+ messages generated from the same tracee to the same
+ tracer is undefined. The internal order of normal
+ messages and the internal order of trace messages will,
+ of course, be preserved as before.</p>
+ </item>
+ </list>
+ <p>The kernel poll feature is currently not supported by
+ the runtime system with SMP support. It will probably be
+ supported in a future release.</p>
+ <p>*** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>Own Id: OTP-6006 Aux Id: OTP-6095 </p>
+ </item>
+ <item>
+ <p>Linked-in driver modifications.</p>
+ <list type="bulleted">
+ <item>
+ <p>Linked-in drivers must be recompiled.</p>
+ </item>
+ <item>
+ <p>The <c><![CDATA[refc]]></c> field in the <c><![CDATA[ErlDrvBinary]]></c> type
+ has been removed. The reference count can be accessed
+ via API functions. For more information see
+ the <c><![CDATA[erl_driver(1)]]></c> man page.</p>
+ </item>
+ </list>
+ <p>*** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>Own Id: OTP-6095 Aux Id: OTP-6006 </p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>ERTS 5.4.13</title>
+
+ <section>
+ <title>Fixed Bugs and Malfunctions</title>
+ <list type="bulleted">
+ <item>
+ <p>Large files (more than 2 GBytes) are now handled on
+ Solaris 8.</p>
+ <p>Own Id: OTP-5849 Aux Id: seq10157 </p>
+ </item>
+ <item>
+ <p>A failing bit syntax construction could fail with the
+ PREVIOUS exception reason that had occurred in the process
+ (instead of with <c><![CDATA[badarg]]></c>).</p>
+ <p>Own Id: OTP-5911</p>
+ </item>
+ <item>
+ <p>When building OTP, the Kernel application was built in
+ both the primary and secondary bootstrap steps, which
+ would cause problems if OTP including its bootstrap is
+ checked into a version control system (such as CVS).
+ (Thanks to Sebastian Strollo.)</p>
+ <p>Own Id: OTP-5921</p>
+ </item>
+ <item>
+ <p><c><![CDATA[binary_to_term(<<131,109,255,255,255,255)]]></c> and
+ similar expressions used to crash the emulator instead of
+ causing a <c><![CDATA[badarg]]></c> exception. (Thanks to Matthias
+ Lang.)</p>
+ <p>Own Id: OTP-5933</p>
+ </item>
+ <item>
+ <p><c><![CDATA[erlang:hibernate/3]]></c> could sometimes crash the emulator
+ when no heap was needed.</p>
+ <p>Own Id: OTP-5940</p>
+ </item>
+ <item>
+ <p>Execution of match specs could under rare circumstances
+ cause the emulator to dump core.</p>
+ <p>Execution of match specs could cause memory leaks in the
+ hybrid emulator.</p>
+ <p>Own Id: OTP-5955</p>
+ </item>
+ <item>
+ <p>A bug in <c><![CDATA[erlang:trace_info/2]]></c> when getting info for a
+ function in a deleted module resulting in an emulator
+ crash, has been corrected.</p>
+ <p>Own Id: OTP-5957</p>
+ </item>
+ <item>
+ <p>Different (and old) <c><![CDATA[config.guess]]></c> files in the
+ ERTS and Erl_Interface applications would cause build
+ problems on the new Intel-based iMacs.
+ (Thanks to Sebastion Strollo.)</p>
+ <p>Own Id: OTP-5967</p>
+ </item>
+ <item>
+ <p>pthread header and library mismatch on Linux systems (at
+ least some SuSE and Debian) with both NPTL and
+ Linuxthreads libraries installed.</p>
+ <p>Own Id: OTP-5981</p>
+ </item>
+ </list>
+ </section>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>The driver_set_timer did not change the previous timeout
+ if called a second time. Now it works as specified,
+ changing the timeout.</p>
+ <p>Own Id: OTP-5942</p>
+ </item>
+ <item>
+ <p>The undocumented <c><![CDATA[{packet,http}]]></c> option (for the
+ <c><![CDATA[gen_tcp]]></c> module) did not not work correctly when
+ there were multiple continuation lines. (Thanks to Per
+ Hedeland.)</p>
+ <p>Own Id: OTP-5945</p>
+ </item>
+ <item>
+ <p>The setuid_socket_wrap program was corrected to work for
+ C compilers that treat the <c><![CDATA[char]]></c> type as unsigned.
+ (Thanks to Magnus Henoch.)</p>
+ <p>Own Id: OTP-5946</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>ERTS 5.4.12</title>
+
+ <section>
+ <title>Fixed Bugs and Malfunctions</title>
+ <list type="bulleted">
+ <item>
+ <p>Fixed a minor build problem on Windows.</p>
+ <p>Own Id: OTP-5819 Aux Id: OTP-5382 OTP-5540 OTP-5577 </p>
+ </item>
+ <item>
+ <p>The <c><![CDATA[delay_send]]></c> option for <c><![CDATA[gen_tcp]]></c> was
+ broken on Windows.</p>
+ <p>Own Id: OTP-5822</p>
+ </item>
+ <item>
+ <p>If there were user-defined variables in the boot
+ script, and their values were not provided using the
+ <c><![CDATA[-boot_var]]></c> option, the emulator would refuse to
+ start with a confusing error message. Corrected to show a
+ clear, understandable message.</p>
+ <p>The <c><![CDATA[prim_file]]></c> module was modified to not depend
+ on the <c><![CDATA[lists]]></c> module, to make it possible to start
+ the emulator using a user-defined loader. (Thanks to
+ Martin Bjorklund.)</p>
+ <p>Own Id: OTP-5828 Aux Id: seq10151 </p>
+ </item>
+ </list>
+ </section>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>The HiPE compiler identifies more leaf functions,
+ giving slightly faster code.</p>
+ <p>Corrected problems in HiPE's coalescing register
+ allocating that would cause it to fail when compiling
+ very large functions (e.g. some of parse modules in the
+ Megaco application).</p>
+ <p>Own Id: OTP-5853</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>ERTS 5.4.11</title>
+
+ <section>
+ <title>Fixed Bugs and Malfunctions</title>
+ <list type="bulleted">
+ <item>
+ <p>Timers could sometimes timeout too early. This bug has
+ now been fixed.</p>
+ <p>Automatic cancellation of timers created by
+ <c><![CDATA[erlang:send_after(Time,pid(),Msg)]]></c> and
+ <c><![CDATA[erlang:start_timer(Time,pid(),Msg)]]></c> has been
+ introduced. Timers created with the receiver specified by a
+ pid, will automatically be cancelled when the receiver
+ exits. For more information see the <c><![CDATA[erlang(3)]]></c> man
+ page.</p>
+ <p>In order to be able to maintain a larger amount of timers
+ without increasing the maintenance cost, the internal
+ timer wheel and bif timer table have been enlarged.</p>
+ <p>Also a number of minor bif timer optimizations have been
+ implemented.</p>
+ <p>Own Id: OTP-5795 Aux Id: OTP-5090, seq8913, seq10139,
+ OTP-5782 </p>
+ </item>
+ <item>
+ <p><c><![CDATA[erlang:monitor(process,Pid)]]></c> hanged if <c><![CDATA[Pid]]></c>
+ referred to a process on a non-existing node with the same
+ nodename as the nodename of node on which the call was made.
+ This bug has now been fixed.</p>
+ <p>Own Id: OTP-5827</p>
+ </item>
+ </list>
+ </section>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>By setting Unix environment variables, the priority for
+ the emulator can be lowered when it is writing crash
+ dumps and the time allowed for finishing writing a crash
+ dump can be set to a certain number of seconds. See the
+ documentation for <c><![CDATA[erl]]></c> in the ERTS application.
+ (Also, a few other previously undocumented environment
+ variables are now documented.)</p>
+ <p>Own Id: OTP-5818</p>
+ </item>
+ <item>
+ <p>Documentation improvements:</p>
+ <p>- documentation for <c><![CDATA[erlang:link/1]]></c> corrected</p>
+ <p>- command line flag <c><![CDATA[-code_path_cache]]></c> added</p>
+ <p>- <c><![CDATA[erl]]></c> command line flags clarifications</p>
+ <p>- <c><![CDATA[net_kernel(3)]]></c> clarifications</p>
+ <p>Own Id: OTP-5847</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>ERTS 5.4.10</title>
+
+ <section>
+ <title>Fixed Bugs and Malfunctions</title>
+ <list type="bulleted">
+ <item>
+ <p>-D_GNU_SOURCE is now always passed on the compile command
+ line on linux. This in order to ensure that all included
+ system headers see _GNU_SOURCE defined.</p>
+ <p>_GNU_SOURCE is now also defined on linux in configure
+ when looking for features.</p>
+ <p>Some minor (harmless) configure bugs were also fixed.</p>
+ <p>Own Id: OTP-5749</p>
+ </item>
+ <item>
+ <p>Some compiler warnings and Dialyzer warnings were
+ eliminated in the Tools application.</p>
+ <p>When tracing to a port (which <c><![CDATA[fprof]]></c> does),
+ there could be fake schedule out/schedule in messages
+ sent for a process that had exited.</p>
+ <p>Own Id: OTP-5757</p>
+ </item>
+ </list>
+ </section>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>The BIFs <c><![CDATA[iolist_size/1]]></c> and <c><![CDATA[iolist_to_binary/1]]></c>
+ has been added.</p>
+ <p>The BIF <c><![CDATA[list_to_existing_atom/1]]></c> has been added.</p>
+ <p>Minor bug fix: The exception reason could be changed
+ to <c><![CDATA[error]]></c> inside nested try/catch constructs if the
+ <c><![CDATA[erlang:raise/3]]></c> BIF was called with an empty
+ stacktrace. (Calling <c><![CDATA[erlang:raise/3]]></c> with an empty
+ stacktrace is NOT recommended.)</p>
+ <p>Minor bugfix: On Windows, <c><![CDATA[file:open/2]]></c> will now
+ return the documented error reason <c><![CDATA[{error,eisdir}]]></c>
+ if the filename refers to a directory (it used to return
+ <c><![CDATA[{error,eacces}]]></c>).</p>
+ <p>The message in the documentation for
+ <c><![CDATA[erlang:system_monitor/2]]></c>, description of
+ <c><![CDATA[busy_dist_port]]></c>, was corrected.</p>
+ <p>Own Id: OTP-5709 Aux Id: seq10100 </p>
+ </item>
+ <item>
+ <p>The previously undocumented and UNSUPPORTED <c><![CDATA[zlib]]></c>
+ module has been updated in an incompatible way and many
+ bugs have been corrected. It is now also documented.</p>
+ <p>*** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>Own Id: OTP-5715</p>
+ </item>
+ <item>
+ <p>New socket options <c><![CDATA[priority]]></c> and <c><![CDATA[tos]]></c> for
+ platforms that support them (currently only Linux).</p>
+ <p>Own Id: OTP-5756</p>
+ </item>
+ <item>
+ <p>Only the emulator is now linked with termcap library in
+ order to decrease library dependencies for other otp
+ programs.</p>
+ <p>Own Id: OTP-5758</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>ERTS 5.4.9.2</title>
+
+ <section>
+ <title>Fixed Bugs and Malfunctions</title>
+ <list type="bulleted">
+ <item>
+ <p>The native resolver has gotten an control API for
+ extended debugging and soft restart. It is:
+ <c><![CDATA[inet_gethost_native:control(Control)]]></c><br></br><c><![CDATA[Control = {debug_level,Level} | soft_restart]]></c><br></br><c><![CDATA[Level = integer() in the range 0-4]]></c>.</p>
+ <p>Own Id: OTP-5751 Aux Id: EABln25013 </p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>ERTS 5.4.9.1</title>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>On VxWorks, epmd did not handle file descriptors with
+ higher numbers than 63. Also, if epmd should get a file
+ descriptor with a number &gt;= FD_SETSIZE, it will close a
+ the file descriptor and write a message to the log
+ (instead of mysteriously fail); the Erlang node that
+ tried to register will fail with a duplicate_name error
+ (unfortunately, epmd has no way to indicate to the Erlang
+ node why the register attempt failed).</p>
+ <p>Own Id: OTP-5716 Aux Id: seq10070 </p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>ERTS 5.4.9</title>
+
+ <section>
+ <title>Fixed Bugs and Malfunctions</title>
+ <list type="bulleted">
+ <item>
+ <p>Timezone data is now initialized better. (was a problem
+ at least on NetBSD 2.0.2) Thanks to Rich Neswold.</p>
+ <p>Own Id: OTP-5621</p>
+ </item>
+ <item>
+ <p>The hybrid-heap emulator ('erl -hybrid') is much more
+ stable. We have corrected all known bugs that caused it
+ to dump core while running our test suites.</p>
+ <p>Own Id: OTP-5634</p>
+ </item>
+ <item>
+ <p>Fixed rare memory leaks in <c><![CDATA[erlang:demonitor/1]]></c> when
+ distributed monitors were removed.</p>
+ <p>Own Id: OTP-5692</p>
+ </item>
+ <item>
+ <p>Processes were sometimes unnecessarily garbage collected
+ when terminating. These unnecessary garbage collections
+ have now been eliminated.</p>
+ <p>Own Id: OTP-5693</p>
+ </item>
+ </list>
+ </section>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>The <c><![CDATA[c:i/0]]></c> function will now run in a paged mode if
+ there are more than 100 processes in the system. (Thanks
+ to Ulf Wiger.)</p>
+ <p><c><![CDATA[erlang:system_info(process_count)]]></c> has
+ been optimized and does now return exactly the same value
+ as <c><![CDATA[length(processes())]]></c>. Previously
+ <c><![CDATA[erlang:system_info(process_count)]]></c> did not include
+ exiting processes which are included in
+ <c><![CDATA[length(processes())]]></c>.</p>
+ <p>The <c><![CDATA[+P]]></c> flag for <c><![CDATA[erl]]></c>, which sets the maximum
+ number of processes allowed to exist at the same, no longer
+ accepts values higher than 134217727. (You will still
+ probably run out of memory before you'll be able to reach
+ that limit.)</p>
+ <p>Own Id: OTP-5645 Aux Id: seq9984 </p>
+ </item>
+ <item>
+ <p>The term-building driver functions
+ <c><![CDATA[driver_output_term()]]></c> and <c><![CDATA[driver_send_term()]]></c>
+ have been updated:</p>
+ <p>The ERL_DRV_FLOAT type has been added.</p>
+ <p>For the ERL_DRV_BINARY type, the length and offset are
+ now validated against the length of the driver binary.</p>
+ <p>The ERL_DRV_PID type is now implemented (it was
+ documented, but not implemented).</p>
+ <p>Own Id: OTP-5674</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>ERTS 5.4.8</title>
+
+ <section>
+ <title>Fixed Bugs and Malfunctions</title>
+ <list type="bulleted">
+ <item>
+ <p><c><![CDATA[ets:delete/1]]></c> now allows other Erlang process to run
+ when a large table is being deleted.</p>
+ <p>Own Id: OTP-5572</p>
+ </item>
+ <item>
+ <p>A bug regarding tcp sockets which results in hanging
+ <c><![CDATA[gen_tcp:send/2]]></c> has been corrected. To encounter
+ this bug you needed one process that read from a socket,
+ one that wrote more date than the reader read out so the
+ sender got suspended, and then the reader closed the
+ socket. (Reported and diagnosed by Alexey Shchepin.)</p>
+ <p>Corrected a bug in the (undocumented and unsupported)
+ option <c><![CDATA[{packet,http}]]></c> for <c><![CDATA[gen_tcp.]]></c>
+ (Thanks to Claes Wikstrom and Luke Gorrie.)</p>
+ <p>Updated the documentation regarding the second argument to
+ <c><![CDATA[gen_tcp:recv/2]]></c>, the <c><![CDATA[Length]]></c> to receive.</p>
+ <p>Own Id: OTP-5582 Aux Id: seq9839 </p>
+ </item>
+ <item>
+ <p>Erlang/OTP will now build on Mac OS X 10.4 "Tiger" (the
+ problem was that 10.4 has a partially implemented poll()
+ function that can't handle devices). Also, on Mac OS X
+ 10.3 "Panther", Erlang/OTP will now use select() instead
+ of poll() (because poll() on Mac OS X 10.3 is implemented
+ using select()).</p>
+ <p>Own Id: OTP-5595</p>
+ </item>
+ <item>
+ <p>A bug in the file driver when opening a file in
+ compressed mode, and the returned allocated pointer from
+ the compressing library was in very high memory (&gt;= 2GB),
+ causing e.g. <c><![CDATA[file:read/2]]></c> to return
+ <c><![CDATA[{error,ebadf}]]></c>, has been corrected.</p>
+ <p>Own Id: OTP-5618</p>
+ </item>
+ </list>
+ </section>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>The new fun <c><![CDATA[M:F/A]]></c> construct creates a fun that
+ refers to the latest version of <c><![CDATA[M:F/A.]]></c> This syntax is
+ meant to replace tuple funs <c><![CDATA[{M,F}]]></c> which have many
+ problems.</p>
+ <p>The new type test <c><![CDATA[is_function(Fun,A)]]></c> (which may be
+ used in guards) test whether <c><![CDATA[Fun]]></c> is a fun that can be
+ applied with <c><![CDATA[A]]></c> arguments. (Currently, <c><![CDATA[Fun]]></c>
+ can also be a tuple fun.)</p>
+ <p>Own Id: OTP-5584</p>
+ </item>
+ <item>
+ <p>In the HiPE application, there's a new experimental
+ register allocator (optimistic coalescing), and the
+ linear scan register allocator is now also available on
+ ppc. Plus lots of cleanups.</p>
+ <p>Minor hybrid heap corrections.</p>
+ <p>The maximum size of a heap used to be artificially
+ limited so that the size of a heap would fit in 28 bits;
+ that limitation could cause the emulator to terminate in
+ a garbage collection even if there still was available
+ memory. Now the largest heap size for a 32 bit CPU is
+ 1,699,221,830 bytes. (Thanks to Jesper Wilhelmsson.)</p>
+ <p>Also removed the undocumented <c><![CDATA[+H]]></c> emulator option.</p>
+ <p>Own Id: OTP-5596</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>ERTS 5.4.7</title>
+
+ <section>
+ <title>Fixed Bugs and Malfunctions</title>
+ <list type="bulleted">
+ <item>
+ <p><c><![CDATA[to_erl]]></c> could close unexpectedly on Linux systems.
+ Also, output from the emulator could be lost. Corrected.</p>
+ <p>Own Id: OTP-5561</p>
+ </item>
+ </list>
+ </section>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>The <c><![CDATA[cpu_timestamp]]></c> option for <c><![CDATA[erlang:trace/3]]></c>
+ is now also supported on Linux.</p>
+ <p>Own Id: OTP-5532 Aux Id: seq9813 </p>
+ </item>
+ <item>
+ <p>The last known <c><![CDATA[werl]]></c> window size/position is now saved
+ correctly when <c><![CDATA[werl]]></c> is stopped with the window
+ minimized. A problem with the placement not being saved if
+ the emulator is halted or stopped from the JCL menu has also
+ been fixed.</p>
+ <p>Own Id: OTP-5544 Aux Id: OTP-5522 </p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>ERTS 5.4.6</title>
+
+ <section>
+ <title>Fixed Bugs and Malfunctions</title>
+ <list type="bulleted">
+ <item>
+ <p>Some math libraries do not always throw floating-point
+ exceptions on errors. In order to be able to use these
+ libraries, floating-point errors are now more thoroughly
+ checked.</p>
+ <p>Misc floating-point fixes for Linux and MacOSX.</p>
+ <p>Own Id: OTP-5467</p>
+ </item>
+ <item>
+ <p>An internal buffer was sometimes not cleared which caused
+ garbage to appear in error messages sent to the error
+ logger.</p>
+ <p><c><![CDATA[errno]]></c> was sometimes clobbered which caused erroneous
+ error reports about <c><![CDATA[poll()]]></c> errors.</p>
+ <p>Only emulators on unix platforms were affected by these
+ bugs.</p>
+ <p>Own Id: OTP-5492</p>
+ </item>
+ <item>
+ <p>The ethread library now works on OpenBSD.</p>
+ <p>Own Id: OTP-5515</p>
+ </item>
+ <item>
+ <p>Corrected a bug in the (undocumented and unsupported)
+ option <c><![CDATA[{packet,http}]]></c> for <c><![CDATA[gen_tcp]]></c>.
+ (Thanks to Claes Wikstrom and Luke Gorrie.)</p>
+ <p>Own Id: OTP-5519</p>
+ </item>
+ </list>
+ </section>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p><c><![CDATA[binary_to_term/1]]></c> could cause the emulator to crash
+ when given invalid pids or funs.</p>
+ <p>Own Id: OTP-5484 Aux Id: seq9801 </p>
+ </item>
+ <item>
+ <p>Some more stability problems were fixed in the
+ hybrid-heap emulator.</p>
+ <p>Own Id: OTP-5489</p>
+ </item>
+ <item>
+ <p>After <c><![CDATA[werl]]></c> was closed with the window minimized, it
+ was not possible to restart <c><![CDATA[werl]]></c> with an open
+ window. A temporary solution has so far been implemented
+ that restores the initial window settings every time
+ <c><![CDATA[werl]]></c> is started.</p>
+ <p>Own Id: OTP-5522</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>ERTS 5.4.5</title>
+
+ <section>
+ <title>Fixed Bugs and Malfunctions</title>
+ <list type="bulleted">
+ <item>
+ <p>If a process had node links (created by
+ <c><![CDATA[monitor_node/2]]></c>), executing
+ <c><![CDATA[process_info(Pid,memory)]]></c> for that process would
+ crash the emulator.</p>
+ <p>Own Id: OTP-5420</p>
+ </item>
+ <item>
+ <p>Minor corrections to the help text printed by <c><![CDATA[erlc -help]]></c>. The documentation for <c><![CDATA[erlc]]></c> was also
+ slightly updated.</p>
+ <p>Own Id: OTP-5428</p>
+ </item>
+ <item>
+ <p>32-bit words were used for offsets in the garbage
+ collector. This caused the emulator to crash on 64-bit
+ machines when heaps were moved more than 4 GB during
+ garbage collection.</p>
+ <p>Own Id: OTP-5430</p>
+ </item>
+ <item>
+ <p><c><![CDATA[is_boolean(42.5)]]></c> failed to load if optimization was
+ explicitly turned off.</p>
+ <p>Own Id: OTP-5448</p>
+ </item>
+ <item>
+ <p>If there was a call to <c><![CDATA[Module:foo/X]]></c> from any loaded
+ module, the returned by <c><![CDATA[M:module_info(exports)]]></c> would
+ always include <c><![CDATA[{foo,X}]]></c> (even though
+ <c><![CDATA[Module:foo/X]]></c> if was not defined).</p>
+ <p>Own Id: OTP-5450 Aux Id: seq9722 </p>
+ </item>
+ </list>
+ </section>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>The <c><![CDATA[c]]></c> option for the <c><![CDATA[+B]]></c> flag has been
+ introduced which makes it possible to use Ctrl-C
+ (Ctrl-Break on Windows) to interrupt the shell process
+ rather than to invoke the emulator break handler. All new
+ <c><![CDATA[+B]]></c> options are also supported on Windows
+ (<c><![CDATA[werl]]></c>) as of now. Furthermore, Ctrl-C on Windows has
+ now been reserved for copying text (what Ctrl-Ins was used
+ for previously). Ctrl-Break should be used for break
+ handling. Lastly, the documentation of the system flags has
+ been updated.</p>
+ <p>Own Id: OTP-5388</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>ERTS 5.4.4</title>
+
+ <section>
+ <title>Fixed Bugs and Malfunctions</title>
+ <list type="bulleted">
+ <item>
+ <p>The function <c><![CDATA[erlang:float/1]]></c> can now be used in
+ match specifications and is recognized by
+ <c><![CDATA[dbg:fun2ms/1]]></c> and <c><![CDATA[ets:fun2ms/1]]></c>. This
+ addition is part of the work to "harmonize" match
+ specification guards with Erlang guards.</p>
+ <p>Own Id: OTP-5297 Aux Id: OTP-4927 </p>
+ </item>
+ <item>
+ <p>The <c><![CDATA[register/2]]></c> BIF would return <c><![CDATA[true]]></c> even if
+ the second argument was not a pid for living process.
+ Corrected to cause an exception.</p>
+ <p>Own Id: OTP-5324 Aux Id: seq9698 </p>
+ </item>
+ <item>
+ <p>In the 'bag' type of ets tables, elements having the same
+ key were supposed to be order in insertion order. The
+ would be wrong if a rehash occurred.</p>
+ <p>Own Id: OTP-5340 Aux Id: seq9704 </p>
+ </item>
+ <item>
+ <p>Linked in drivers in the Crypto and Asn1 applications
+ are now compiled with the <c><![CDATA[-D_THREAD_SAFE]]></c> and
+ <c><![CDATA[-D_REENTRANT]]></c> switches on unix when the emulator has
+ thread support enabled.</p>
+ <p>Linked in drivers on MacOSX are not compiled with the
+ undocumented <c><![CDATA[-lbundle1.o]]></c> switch anymore. Thanks to
+ Sean Hinde who sent us a patch.</p>
+ <p>Linked in driver in Crypto, and port programs in SSL, now
+ compiles on OSF1.</p>
+ <p>Minor makefile improvements in Runtime_Tools.</p>
+ <p>Own Id: OTP-5346</p>
+ </item>
+ <item>
+ <p>Fixed a bug in the hybrid heap in distributed send
+ operations.</p>
+ <p>Own Id: OTP-5361</p>
+ </item>
+ <item>
+ <p>A BIF <c><![CDATA[erlang:raise/3]]></c> has been added. See the manual
+ for details. It is intended for internal system programming
+ only, advanced error handling.</p>
+ <p>Own Id: OTP-5376 Aux Id: OTP-5257 </p>
+ </item>
+ <item>
+ <p>Mikael Pettersson (HiPE) corrected a few bugs in the
+ emulator that caused problems when compiled with the
+ experimental gcc-4.0.0.</p>
+ <p>Own Id: OTP-5386</p>
+ </item>
+ </list>
+ </section>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>Minor update of the internal documentation of
+ the <c><![CDATA[epmd]]></c> protocol.</p>
+ <p>The listen port of <c><![CDATA[epmd]]></c> has now been registered at
+ IANA:
+ <url href="http://www.iana.org/assignments/port-numbers">http://www.iana.org/assignments/port-numbers</url>.</p>
+ <p>Own Id: OTP-5234</p>
+ </item>
+ <item>
+ <p><c><![CDATA[run_erl.c]]></c> now works on Mac OS X and FreeBSD.</p>
+ <p>Own Id: OTP-5384</p>
+ </item>
+ <item>
+ <p>A few bugs were corrected in the HiPE application.</p>
+ <p>Own Id: OTP-5385</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>ERTS 5.4.3</title>
+
+ <section>
+ <title>Fixed Bugs and Malfunctions</title>
+ <list type="bulleted">
+ <item>
+ <p>Font and color preferences for <c><![CDATA[werl.exe]]></c> now can be
+ saved even after the first time you run <c><![CDATA[werl.exe]]></c>.
+ The window position and size is also saved. Patch from
+ James Hague who did all the hard work.</p>
+ <p>Own Id: OTP-5250</p>
+ </item>
+ <item>
+ <p>OTP archive libraries, e.g. the <c><![CDATA[erl_interface]]></c>
+ library, on MacOSX could not be used without first
+ rerunning <c><![CDATA[ranlib]]></c> on them. This bug has now been
+ fixed.</p>
+ <p>Own Id: OTP-5274</p>
+ </item>
+ <item>
+ <p>Bugs in <c><![CDATA[erlang:hash/2]]></c> and <c><![CDATA[erlang:phash/2]]></c> on
+ 64-bit platforms have been fixed.</p>
+ <p>Own Id: OTP-5292</p>
+ </item>
+ </list>
+ </section>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>Corrected a crash in the 64-bits emulator.</p>
+ <p>Corrected a problem in the hybrid heap emulator.</p>
+ <p>In the chapter about the abstract format in the ERTS User's
+ Guide, updated the last section about how the abstract
+ format is stored in BEAM files.</p>
+ <p>Own Id: OTP-5262</p>
+ </item>
+ <item>
+ <p>The maximum number of concurrent threads in the internal
+ ethread thread package has been limited to 2048.</p>
+ <p>Own Id: OTP-5280</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>ERTS 5.4.2.1</title>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>If Erlang/OTP was installed in a short directory name,
+ such as <c><![CDATA[C:\\Program\\erl5.4.2]]></c>, the emulator would not
+ start.</p>
+ <p>Own Id: OTP-5254</p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>ERTS 5.4.2</title>
+
+ <section>
+ <title>Fixed Bugs and Malfunctions</title>
+ <list type="bulleted">
+ <item>
+ <p>If one used <c><![CDATA[select/3]]></c> and <c><![CDATA[select/1]]></c> on a
+ non-fixed ETS table and deleted objects simultaneously,
+ the emulator could crash. Note that the result of such
+ simultaneous operations on tables that are not in a fixed
+ state is still undefined, but the emulator crash is,
+ needless to say, fixed.</p>
+ <p>Own Id: OTP-5209 Aux Id: seq9198 </p>
+ </item>
+ <item>
+ <p>Arithmetic with big numbers could crash the emulator.</p>
+ <p>The HiPE native code compiler and run-time code in the
+ emulator has been updated. (Note: Native code is still
+ not supported.)</p>
+ <p>Eliminated a few bugs that could crash the hybrid emulator
+ (which is not supported).</p>
+ <p>Own Id: OTP-5233 Aux Id: seq9587 </p>
+ </item>
+ </list>
+ </section>
+ </section>
+
+ <section>
+ <title>ERTS 5.4.1</title>
+
+ <section>
+ <title>Fixed Bugs and Malfunctions</title>
+ <list type="bulleted">
+ <item>
+ <p>The ethread library was unnecessarily rebuilt multiple
+ times during the build process, also a debug version of
+ the library was build during the install phase. These
+ unnecessary builds have now been removed. Note, the
+ content of the installed Erlang/OTP system is not
+ effected at all by this change.</p>
+ <p>Own Id: OTP-5203</p>
+ </item>
+ <item>
+ <p>The emulator could fail to clear the memory segment
+ cache. This could potentially cause memory allocation to
+ unnecessarily fail when memory usage was close to its
+ maximum. This bug has now been fixed.</p>
+ <p>Own Id: OTP-5211</p>
+ </item>
+ <item>
+ <p>std_alloc (std short for standard) was sometimes called
+ def_alloc (def short for default). std_alloc is now
+ everywhere referred to as std_alloc.</p>
+ <p>Own Id: OTP-5216</p>
+ </item>
+ <item>
+ <p>A documentation bug has been corrected in
+ the <c><![CDATA[erts_alloc(3)]]></c> documentation. It was stated that
+ some of the memory allocators present were by default
+ disabled. This is true for Erlang/OTP R9C, but is not true
+ for Erlang/OTP R10B. In R10B all memory allocators present
+ are enabled by default.</p>
+ <p>Own Id: OTP-5217</p>
+ </item>
+ </list>
+ </section>
+
+ <section>
+ <title>Improvements and New Features</title>
+ <list type="bulleted">
+ <item>
+ <p>The emulator now close all open files and sockets
+ immediately after receiving an USR1 signal. This causes
+ the emulator to unregister at <c><![CDATA[epmd]]></c> as early as
+ possible.</p>
+ <p>Own Id: OTP-5221 Aux Id: OTP-4985, seq9514 </p>
+ </item>
+ <item>
+ <p>Try/catch support in the emulator slightly updated.</p>
+ <p>Own Id: OTP-5229</p>
+ </item>
+ </list>
+ </section>
+ </section>
+</chapter>
+