Bug fix release : otp_src_R13B01 Build date : 2009-06-08 This is R13B01, the first maintenance release for the R13B major release. You can find the README file for the release at http://www.erlang.org/download/otp_src_R13B01.readme (this file) The source distribution and binary distribution for Windows can be downloaded from http://www.erlang.org/download/otp_src_R13B01.tar.gz http://www.erlang.org/download/otp_win32_R13B01.exe The distribution can also be downloaded using the BitTorrent protocol. Use the following torrent files to download the source distribution and binary distribution for Windows: http://www.erlang.org/download/otp_src_R13B01.tar.gz.torrent http://www.erlang.org/download/otp_win32_R13B01.exe.torrent Note: To unpack the TAR archive you need a GNU TAR compatible program. For installation instructions please read the README file that is part of the distribution. The on-line documentation can be found at: http://www.erlang.org/doc/ You can also download the complete HTML documentation or the Unix manual files http://www.erlang.org/download/otp_doc_html_R13B01.tar.gz http://www.erlang.org/download/otp_doc_man_R13B01.tar.gz We also want to thank those that sent us patches, suggestions and bug reports, The OTP Team --- HIGHLIGHTS ------------------------------------------------------------ OTP-7774 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. 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. 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. 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. 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. 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. OTP-7922 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 write_concurrency, as it is achieved at the expense of some execution and memory overhead. Furthermore, ets:select and select_count has been improved for all table types to not aquire exclusive table lock during the iteration. And iterations using first and next over ordered_set will also not aquire exclusive table lock anymore. OTP-7995 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. OTP-8006 New functionality in ETS to transfer the ownership of a table. A table can either change owner by declaring an "heir", another process that will inherit the table if the owner terminates. The owner of a table can also be changed by calling a new function ets:give_away. OTP-8013 Leex, a lexical analyzer generator for Erlang, has been added to Parsetools. This initial version should be considered experimental; it is known that there will be changes and additions. (Thanks to Robert Virding.) --- common_test-1.4.2 ------------------------------------------------------------ OTP-7981 Various corrections and improvements of Common Test and Test Server. OTP-8042 Updated documentation of events. --- compiler-4.6.2 ------------------------------------------------------------ OTP-7980 The compiler would crash while compiling certain complex function bodies containing receive after due to a bug in the jump optimizer (a label that had only had backward references could still be removed). (Thanks to Vincent de Phily.) --- cosEvent-2.1.6 ------------------------------------------------------------ OTP-7987 Obsolete guards, e.g. record vs is_record, has been changed to avoid compiler warnings. --- cosEventDomain-1.1.6 ------------------------------------------------------------ OTP-7987 Obsolete guards, e.g. record vs is_record, has been changed to avoid compiler warnings. --- cosFileTransfer-1.1.8 ------------------------------------------------------------ OTP-7987 Obsolete guards, e.g. record vs is_record, has been changed to avoid compiler warnings. --- cosNotification-1.1.11 ------------------------------------------------------------ OTP-7987 Obsolete guards, e.g. record vs is_record, has been changed to avoid compiler warnings. --- cosProperty-1.1.9 ------------------------------------------------------------ OTP-7987 Obsolete guards, e.g. record vs is_record, has been changed to avoid compiler warnings. --- cosTime-1.1.6 ------------------------------------------------------------ OTP-7987 Obsolete guards, e.g. record vs is_record, has been changed to avoid compiler warnings. --- cosTransactions-1.2.7 ------------------------------------------------------------ OTP-7987 Obsolete guards, e.g. record vs is_record, has been changed to avoid compiler warnings. --- dialyzer-1.9.2 ------------------------------------------------------------ OTP-8037 Fixed problem with type inference going into an infinite loop when analyzing a strongly connected component of functions that do not return but also contain an erroneous call which makes them fail and be assigned the type none() instead of the type unit(). More accurate type information for some BIFs and library files. Introduced boolean() as the `official' name for the type was so far known as bool(). The latter is still accepted as well as boolean(). --- erl_interface-3.6.2 ------------------------------------------------------------ OTP-7978 A problem with gethostbyname in erl_start.c could cause a buffer overflow. This has now been fixed. Clean up of code and removed compiler warnings. --- erts-5.7.2 ------------------------------------------------------------ OTP-7472 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.) OTP-7774 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. 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. 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. 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. 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. 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. OTP-7898 Fixed a bug that caused error logging from driver_select sometimes with additional symptoms such as failing IP communications or even an emulator crash. OTP-7922 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 write_concurrency, as it is achieved at the expense of some execution and memory overhead. Furthermore, ets:select and select_count has been improved for all table types to not aquire exclusive table lock during the iteration. And iterations using first and next over ordered_set will also not aquire exclusive table lock anymore. OTP-7952 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. OTP-7971 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. OTP-7990 Processes could potentially get stuck on an offline scheduler. OTP-7995 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. OTP-7997 binary_to_atom/2 and binary_to_existing_atom/2 could leak memory if they caused a badarg exception. OTP-8000 A process could under very rare circumstances erroneously be resumed. OTP-8006 New functionality in ETS to transfer the ownership of a table. A table can either change owner by declaring an "heir", another process that will inherit the table if the owner terminates. The owner of a table can also be changed by calling a new function ets:give_away. OTP-8008 Load balancing between schedulers could under rare circumstances cause an emulator crash. OTP-8009 Updates to Tilera build environment. OTP-8014 A stack trace was unnecessarily saved during process termination. OTP-8022 erlang:memory(processes_used) always returned 0 instead of the correct value. (Thanks to Geoff Cant) OTP-8030 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 +sct, and the +sbt emulator flags in the erl(1) documentation. The CPU topologies returned from erlang:system_info/1 and erlang:system_flag/2 now always contain the processor level, also when not strictly necessary. OTP-8040 Various fixes in ETS: ets:first could return a deleted key in a fixated table. ets:lookup could return objects out of order if a deleted object was re-inserted into a fixed bag. ets:delete_object could fail to delete duplicate objects in a duplicate_bag. --- eunit-2.1.2 ------------------------------------------------------------ OTP-8038 Miscellanous updates. --- hipe-3.7.2 ------------------------------------------------------------ OTP-8038 Miscellanous updates. --- ic-4.2.21 ------------------------------------------------------------ OTP-7982 The function print_erlang_binary (oe_ei_code_erlang_binary.c) updated to avoid compiler warning. OTP-7987 Obsolete guards, e.g. record vs is_record, has been changed to avoid compiler warnings. --- inets-5.0.14 ------------------------------------------------------------ OTP-7882 [httpc] Incorrect http version option check. OTP-7883 [httpc] Unneccessary error report when client terminating as a result of the server closed the socket unexpectedly. OTP-7888 [tftp] The callback watchdog has been removed, as it turned out to be counter productive when the disk was overloaded. Earlier a connection was aborted when a callback (which performs the file access in the TFTP server) took too long time. [tftp] The error message "Too many connections" has been reclassified to be a warning. OTP-7950 Failed transforming a relative URI to an absolute URI. OTP-7976 [httpd] The HTTP server did not handle the config option ssl_ca_certificate_file. --- inets-5.1 ------------------------------------------------------------ OTP-7994 Updated guard tests (i.e. is_list(L) instead of list(L) and andalso/orelse instead of ","/";"). OTP-7998 Added support for web services using only basic auth, with a token as the user part and no password part. OTP-8001 Remove use of the deprecated regexp module. OTP-8004 [httpc] - Bind HTTP client to IP-addr. It is now possible to specify an alternate ip-address and port to be used when the client connects to the server. As a side-effect of this, the option ipv6 has been removed and replaced by the ipfamily option. OTP-8005 [httpc] The option max_keep_alive_length was not implemented. --- kernel-2.13.2 ------------------------------------------------------------ OTP-7971 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. OTP-7974 A bug when doing io:get_line (among other calls) from a file opened with encoding other than latin1, causing false unicode errors to occur, is now corrected. --- megaco-3.11 ------------------------------------------------------------ OTP-7302 In order to better utilize multi-core procs, the flex (text) scanner has been improved. The flex (text) scanner has been made reentrant, *if* the flex utility supports this. Note that the version of flex supplied with some OS/distros (Solaris 10, FreeBSD and OpenBSD to mention a few) may not support this, in which case the flex scanner will be non-reentrant, just as before. --- mnesia-4.4.10 ------------------------------------------------------------ OTP-7928 Minor (smp) optimizations. OTP-7968 Mnesia crashed if a qlc query was running inside a transaction when mnesia stopped at another node. Thanks Teemu Antti-Poika. OTP-8002 Mnesia could crash when loading local_content tables. --- observer-0.9.8.1 ------------------------------------------------------------ OTP-7774 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. 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. 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. 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. 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. 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. --- odbc-2.10.5 ------------------------------------------------------------ OTP-8039 A missing return statement in a non void function has been fixed in odbcserver.c. (Thanks to Nico Kruber) Clean up of code, changed deprecated guard functions. --- orber-3.6.13 ------------------------------------------------------------ OTP-7987 Obsolete guards, e.g. record vs is_record, has been changed to avoid compiler warnings. --- os_mon-2.2.2 ------------------------------------------------------------ OTP-7741 disksup:get_disk_data/0 returned disk volume in bytes instead of kbytes as stated in the documentation. The problem occured on Windows only and is now corrected. --- parsetools-2.0 ------------------------------------------------------------ OTP-7969 The parsers generated by Yecc now report correct error lines when possible. OTP-8013 Leex, a lexical analyzer generator for Erlang, has been added to Parsetools. This initial version should be considered experimental; it is known that there will be changes and additions. (Thanks to Robert Virding.) --- percept-0.8.2 ------------------------------------------------------------ OTP-7975 Extensions to egd:color/1 for using atoms as color definition in addition to rgb triplets. --- reltool-0.2.2 ------------------------------------------------------------ OTP-7999 The tool crashed when rel, script and boot files were generated via the. This has been fixed. --- snmp-4.13.2 ------------------------------------------------------------ OTP-7961 [manager] Failure during downed user cleanup. As part of the cleanup after a crashed user, the manager attempts to unregister the agents registered by this user. This however failed, causing a server crash. OTP-7977 [manager] Incorrectly documented value type for IpAddress (ip). The value type for IpAddress is documented as ip but is actually ia. The value type ip has been added. The old (not documented) value type ia still works. OTP-7983 [manager] EngineId lookup failes when using version-3. OTP-7989 [agent] As of version 4.13 the possible return values of the function snmpa_mpd:process_packet/4 changed, but this was not documented. --- snmp-4.13.3 ------------------------------------------------------------ OTP-8015 [manager] A get-request for an oid of type BITS was actually returned as OCTET STRING. Values of type BITS are encoded as OCTET STRING, which makes it impossible for the decoder to know that they should really be of type BITS. Instead, this has to be done higher up in the stack, where there is knowledge of the MIB (assuming that the mib has been loaded, there is info about the type of the mibentry). This problem has now been fixed, but requires that the MIB defining this mib-entry is loaded! The utility function snmpm:oid_to_type/1 has been added for debug purpose. The utility function(s) snmp:octet_string_to_bits/1 and snmp:bits_to_octet_string/1 has also been added. These can be used if the user prefers to handle the conversion on their own. OTP-8020 Fixed some issues when the agent initiates a discovery process. Changed the API of the discovery function to solve some of these problems. Introduced various config options to control the discovery process. --- ssh-1.1.3 ------------------------------------------------------------ OTP-7996 The operation ssh_sftp:stop_channel/1 returned an exception if the connection already had been closed. OTP-8034 SSH did not handle if supervisor:start_child/2 returned {error, already_present}. OTP-8035 SSH no longer cause supervisor reports when a connection is terminated in a controlled manner. --- ssl-3.10.2 ------------------------------------------------------------ OTP-7963 A "new_ssl" socket was not closed if the controlling process died without calling ssl:close/1. --- ssl-3.10.3 ------------------------------------------------------------ OTP-8011 Packet handling was not implemented correctly. Inet option handling support have been improved. The verify_fun is now invoked even if verify_peer is used, that implies that by default {bad_cert,unknown_ca} is an accepted fault during the client connection phase. The check can still be done by suppling another verify_fun. --- stdlib-1.16.2 ------------------------------------------------------------ OTP-7933 Interpreted escripts are now tail recursive. The function erl_eval:expr/5 has been introduced. OTP-7965 The text of tokens returned by the Erlang scanner (erl_scan) was sometimes empty when the text option was given and StartLocation was a line. This bug has been fixed. OTP-7979 gen_server:call/2,3 will be somewhat faster if the calling process has a many messages in its message queue. OTP-7984 The documentation for base64:decode/1 has been updated to point out that it strips whitespace. base64:decode/1 and base64:mime_decode/1 would sometimes fail instead of stripping away non-base64 characters. OTP-8019 Random now supports seed with arity one, random:seed/1, which takes a three-tuple. OTP-8024 The regexp module now recognizes the escape sequences \xXY and \x{X...}. OTP-8029 Two types in the gen module were corrected. OTP-8033 array:from_orddict([]) and array:from_list([]) would construct fixed arrays instead of extendible arrays. --- syntax_tools-1.6.2 ------------------------------------------------------------ OTP-8038 Miscellanous updates. --- test_server-3.3.2 ------------------------------------------------------------ OTP-7981 Various corrections and improvements of Common Test and Test Server. --- typer-0.1.7.1 ------------------------------------------------------------ OTP-8038 Miscellanous updates. --- wx-0.98.2 ------------------------------------------------------------ OTP-7943 Olle Mattson have made a large demo, see examples/demo/, that triggered the following bugs and new features: New book controls. Added wxToolbar:addTool/6. Empty binaries will be used to indicate NULL where applicable. --- xmerl-1.2 ------------------------------------------------------------ OTP-6635 In xmerl-1.2 we have added the first Beta version of the new SAX parser (module: xmerl_sax_parser), it supports XML 1.0. We call it Beta due to that the validation part is not ready yet and that the parser still has some known limitations (mostly in the DTD area). Known limitations: - the external DTD in the DOCTYPE declaration is handled but other external entities are not supported. - the general entity values are just checked in the structure after replacement. - parsed entities are supported on markup declaration level (e.g. partly replacement of markup declaration with PEReference is not supported). - conditionalSect in external DTD's are not supported. - recursive loops in entity declarations are not detected. The version is increased from 1.1.12 to 1.2 is due to that the new parser is dependent on the Unicode support that was added in OTP R13B. The old xmerl functionality is not changed.