diff options
author | Erlang/OTP <[email protected]> | 2009-11-20 14:54:40 +0000 |
---|---|---|
committer | Erlang/OTP <[email protected]> | 2009-11-20 14:54:40 +0000 |
commit | 84adefa331c4159d432d22840663c38f155cd4c1 (patch) | |
tree | bff9a9c66adda4df2106dfd0e5c053ab182a12bd /erts/doc/src/notes.xml | |
download | otp-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.xml | 5439 |
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<S>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><<"abc">></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> + 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 >= 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 (>= 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> + |