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.