Erlang/OTP 17.3

This release of Erlang/OTP can be built from source or installed using pre-built packages for your OS or third-party tools (such as kerl or asdf).

docker run -it erlang:17.3
Bug fix release : otp_src_17.3
Build date      : 2014-09-17

This is 17.3, the third maintenance release for the 17 major release.

You can find the README file for the release at

  http://www.erlang.org/download/otp_src_17.3.readme (this file)

The source distribution and binary distributions for Windows can be
downloaded from

  http://www.erlang.org/download/otp_src_17.3.tar.gz
  http://www.erlang.org/download/otp_win32_17.3.exe
  http://www.erlang.org/download/otp_win64_17.3.exe

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_17.3.tar.gz
  http://www.erlang.org/download/otp_doc_man_17.3.tar.gz

We also want to thank those that sent us patches, suggestions and bug reports,

The OTP Team


--- POTENTIAL INCOMPATIBILITIES -----------------------------------------

   OTP-12061  == erts kernel ==

	      When using gen_tcp:connect or gen_udp:open and the fd option
	      with port and/or ip, the port and ip options were ignored.
	      This has been fixed so that if port and/or ip is specified
	      together with fd a bind is requested for that fd. If port
	      and/or ip is not specified (or set to 0 for udp) bind will
	      not be called.

--- asn1-3.0.2 ----------------------------------------------------------

   OTP-12125  Several problems where the ASN.1 compiler would crash when
	      attempting to compile correct specifications have been
	      corrected.

   OTP-12145  Robustness when decoding incorrect BER messages has been
	      improved.

--- common_test-1.8.2 ---------------------------------------------------

   OTP-12037  Ticket OTP-11971 introduced a runtime dependency towards
	      test_server-3.7.1, since the interface between test_server
	      and common_test was changed. Erroneously, the common_test.app
	      file was not updated according to this. This has now been
	      corrected.

   OTP-12119  Warning: this is experimental and may disappear or change
	      without previous warning.

	      Experimental support for running Quickcheck and PropEr tests
	      from common_test suites is added to common_test. See the
	      reference manual for the new module ct_property_testing.

	      Experimental property tests are added under
	      lib/{inet,ssh}/test/property_test. They can be run directly
	      or from the common_test suites
	      inet/ftp_property_test_SUITE.erl and
	      ssh/test/ssh_property_test_SUITE.erl.

	      See the code in the test directories and the man page for
	      details.

	      (Thanks to Tuncer Ayaz for a patch adding Triq)

--- compiler-5.0.2 ------------------------------------------------------

   OTP-12132  Corrected a bug with incorrect code generation when in-lining
	      was turned on.

--- crypto-3.4.1 --------------------------------------------------------

   OTP-12146  Make crypto verify major version number of OpenSSL header
	      files and runtime library. Loading of crypto will fail if
	      there is a version mismatch.

--- dialyzer-2.7.2 ------------------------------------------------------

   OTP-12018  A bug concerning is_record/2,3 has been fixed, as well as
	      some cases where Dialyzer could crash due to reaching system
	      limits.

   OTP-12111  When given the -Wunderspecs flag Dialyzer sometimes output
	      bogus warnings for parametrized types. This bug has been
	      fixed.

   OTP-12150  Dialyzer now fetch the compile options from beam files, and
	      use them when creating core from the abstract code.
	      Previously the options were ignored.

--- diameter-1.7.1 ------------------------------------------------------

   OTP-12074  Don't leave extra bit in decoded AVP data.

	      An extra bit could be communicated in the data field of a
	      diameter_avp record in the case of length errors. Of no
	      consequence for code using the record encoding of Diameter
	      messages, but code examining diameter_avp records would see
	      this bit.

	      Dictionary files must be recompiled for the fix to have
	      effect.

   OTP-12080  Fix counting of outgoing requests and answers setting the
	      E-bit.

	      OTP-11721 broke these counters for all outgoing requests
	      except DWR, and caused answers setting the E-bit to be
	      counted as unknown messages.

   OTP-12094  Fix Failed-AVP decode.

	      The best-effort decode only worked for AVPs in the common
	      dictionary, not for those in the dictionary of the
	      application identified in the Diameter Header of the answer
	      message in question.

	      Failed-AVP in an answer decoded with the RFC 3588 common
	      dictionary (diameter_gen_base_rfc3588) was regarded as an
	      error. The RFC 6733 dictionary was unaffected.

	      Dictionary files must be recompiled for the fix to have
	      effect.

--- edoc-0.7.15 ---------------------------------------------------------

   OTP-12058  Fix spec to doc generation from erl_docgen and edoc for maps

--- erl_docgen-0.3.6 ----------------------------------------------------

   OTP-12058  Fix spec to doc generation from erl_docgen and edoc for maps

--- erl_interface-3.7.18 ------------------------------------------------

   OTP-12153  Implement --enable-sanitizers[=sanitizers]. Similar to
	      debugging with Valgrind, it's very useful to enable
	      -fsanitize= switches to catch bugs at runtime.

--- erts-6.2 ------------------------------------------------------------

    OTP-9828  Fix bug that could cause enif_make_copy to reallocate the
	      binary and thereby invalidate a pointer received from an
	      earlier call to enif_inspect_binary.

   OTP-12052  General documentation updates.

   OTP-12059  Add log2 histogram to lcnt for lock wait time

   OTP-12061  When using gen_tcp:connect or gen_udp:open and the fd option
	      with port and/or ip, the port and ip options were ignored.
	      This has been fixed so that if port and/or ip is specified
	      together with fd a bind is requested for that fd. If port
	      and/or ip is not specified (or set to 0 for udp) bind will
	      not be called.

   OTP-12082  A bug in the VM code implementing sending of signals to ports
	      could cause the receiving port queue to remain in a busy
	      state forever. When this state had been reached, processes
	      sending command signals to the port either got suspended
	      forever, or, if the nosuspend feature was used, always failed
	      to send to the port. This bug was introduced in ERTS version
	      5.10.

	      In order for this bug to be triggered on a port, one had to
	      at least once utilize the nosuspend functionality when
	      passing a signal to the port. This by either calling

	      -- port_command(Port, Data, [nosuspend | Options]),

	      -- erlang:send(Port, {PortOwner, {command, Data}}, [nosuspend
	      | Options]),

	      -- erlang:send_nosuspend(Port, {PortOwner, {command, Data}}),
	      or

	      -- erlang:send_nosuspend(Port, {PortOwner, {command, Data}},
	      Options).

	      Thanks Vasily Demidenok for reporting the issue, and Sergey
	      Kudryashov for providing a test case.

   OTP-12084  A locking bug in the implementation of port scheduling could
	      cause thread unsafe modifications of port internal data
	      structures resulting in a VM crash.

	      This bug was automatically fixed by the rewrite of the
	      scheduling code (OTP-10336) introduced in ERTS version 5.10.

   OTP-12091  Fix size overflow bug at memory allocation. A memory
	      allocation call, with an insane size close to the entire
	      address space, could return successfully as if it had
	      allocated just a few bytes. (Thanks to Don A. Bailey for
	      reporting)

   OTP-12097  Fix various issues where negating a signed integer would
	      trigger undefined behaviour. This fixes issues in the
	      enif_make_int64 interface and some edge cases inside the
	      erlang runtime system.

   OTP-12102  The documentation erroneously listed the +swct command line
	      argument under +sws.

   OTP-12105  Profiling messages could be delivered out of order when
	      profiling on runnable_procs and/or runnable_ports using
	      erlang:system_profile/2. This bug was introduced in ERTS
	      version 5.10.

   OTP-12115  Various logging fixes, including:

	      Add run queue index to the process dump in crash dumps.

	      Add thread index to enomem slogan when crashing.

	      Remove error logger message for sending messages to old
	      instances of the same node.

   OTP-12128  Introduced enif_schedule_nif() to the NIF API.

	      The enif_schedule_nif() function allows a long-running NIF to
	      be broken into separate NIF invocations without the help of a
	      wrapper function written in Erlang. The NIF first executes
	      part of the long-running task, then calls enif_schedule_nif()
	      to schedule a NIF for later execution to continue the task.
	      Any number of NIFs can be scheduled in this manner, one after
	      another. Since the emulator regains control between
	      invocations, this helps avoid problems caused by native code
	      tying up scheduler threads for too long.

	      The enif_schedule_nif() function also replaces the
	      enif_schedule_dirty_nif() in the experimental dirty NIF API.

	      The enif_have_dirty_schedulers() function has also been
	      removed and instead a new field dirty_scheduler_support
	      exists in the struct return by enif_system_info().

	      Note that the only incompatible changes made are in the
	      experimental dirty NIF API. See the NIF documentation for
	      more information.

	      Thanks to Steve Vinoski.

   OTP-12138  Fix compiler warnings reported by LLVM

   OTP-12140  Correct conversion of MIN_SMALL by list_to_integer/1 and
	      binary_to_integer/1. The bug produced an unnormalized bignum
	      which can cause strange behavior such as comparing different
	      to a correct MIN_SMALL integer. The value MIN_SMALL is -(1
	      bsl 27) = -134217728 on a 32-bit VM and -(1 bsl 59) =
	      -576460752303423488 on a 64-bit VM. (Thanks to Jesper Louis
	      Andersen, Mikael Pettersson and Anthony Ramine for report,
	      patch and optimization suggestion)

   OTP-12141  Fix bug in term_to_binary that reallocates binary with
	      inconsistent size information. Bug has never been confirmed
	      to be the cause of any faulty behavior.

   OTP-12155  Real_path method used while prim loading archive files was
	      not taking into account the fact that windows directory
	      symlinks can be across different drives.

--- eunit-2.2.8 ---------------------------------------------------------

   OTP-12051  Minor refactoring.

--- hipe-3.11.1 ---------------------------------------------------------

   OTP-12015  The pretty-printing of bitstrings has been corrected.

   OTP-12018  A bug concerning is_record/2,3 has been fixed, as well as
	      some cases where Dialyzer could crash due to reaching system
	      limits.

--- ic-4.3.6 ------------------------------------------------------------

   OTP-12138  Fix compiler warnings reported by LLVM

--- inets-5.10.3 --------------------------------------------------------

   OTP-12013  httpd: Separate timeout for TLS/SSL handshake from keepalive
	      timeout

   OTP-12119  Warning: this is experimental and may disappear or change
	      without previous warning.

	      Experimental support for running Quickcheck and PropEr tests
	      from common_test suites is added to common_test. See the
	      reference manual for the new module ct_property_testing.

	      Experimental property tests are added under
	      lib/{inet,ssh}/test/property_test. They can be run directly
	      or from the common_test suites
	      inet/ftp_property_test_SUITE.erl and
	      ssh/test/ssh_property_test_SUITE.erl.

	      See the code in the test directories and the man page for
	      details.

	      (Thanks to Tuncer Ayaz for a patch adding Triq)

   OTP-12152  Fix some spelling mistakes in documentation

--- jinterface-1.5.10 ---------------------------------------------------

   OTP-12049  Array now show meaningful values in exceptions.

   OTP-12050  Documentation improvements.

   OTP-12075  Include the cause when raising a new IOException, which
	      should make the reason for the exception clearer.

   OTP-12121  Arrays (here: md5 and freeVars) must not be compared with
	      equals, which is broken (compares identity).

--- kernel-3.0.3 --------------------------------------------------------

   OTP-12061  When using gen_tcp:connect or gen_udp:open and the fd option
	      with port and/or ip, the port and ip options were ignored.
	      This has been fixed so that if port and/or ip is specified
	      together with fd a bind is requested for that fd. If port
	      and/or ip is not specified (or set to 0 for udp) bind will
	      not be called.

   OTP-12154  Accept inet:ip_address() in net_adm:names/1

--- megaco-3.17.2 -------------------------------------------------------

   OTP-12153  Implement --enable-sanitizers[=sanitizers]. Similar to
	      debugging with Valgrind, it's very useful to enable
	      -fsanitize= switches to catch bugs at runtime.

--- mnesia-4.12.3 -------------------------------------------------------

   OTP-12115  Various logging fixes, including:

	      Add run queue index to the process dump in crash dumps.

	      Add thread index to enomem slogan when crashing.

	      Remove error logger message for sending messages to old
	      instances of the same node.

   OTP-12124  Fixed a race which could make create_table fail if a node was
	      going down during the transaction.

--- observer-2.0.2 ------------------------------------------------------

   OTP-12162  Fixed status bar on Windows

--- odbc-2.10.21 --------------------------------------------------------

   OTP-12138  Fix compiler warnings reported by LLVM

   OTP-12153  Implement --enable-sanitizers[=sanitizers]. Similar to
	      debugging with Valgrind, it's very useful to enable
	      -fsanitize= switches to catch bugs at runtime.

--- orber ---------------------------------------------------------------

   OTP-12062  A couple of macros were malformed, missing commas:
	      PROFILEBODY_1_1_TYPEDEF and PROFILEBODY_1_2_TYPEDEF. Thanks
	      to Vlad Dumitrescu.

--- os_mon-2.3 ----------------------------------------------------------

   OTP-12053  Adds a new application parameter 'disksup_posix_only', to
	      make diskup use only options defined in the POSIX standard.

--- public_key-0.22.1 ---------------------------------------------------

   OTP-11915  Added missing encoding support for PBES2, and also completed
	      support for PBES1 that was incomplete.

--- sasl-2.4.1 ----------------------------------------------------------

   OTP-12025  The documentation erroneously specified that
	      alarm_handler:clear_alarm/1 would clear all alarms with id
	      AlarmId. This is now corrected according to the
	      implementation - only the latest received alarm with the
	      given AlarmId is cleared by the simple default handler.

--- snmp-5.1 ------------------------------------------------------------

   OTP-12108  The SNMP manager has been enhanced with dual stack IPv4+IPv6,
	      as the agent just was. The documentation is also now updated
	      for both the agent and the manager.

--- ssh-3.0.5 -----------------------------------------------------------

   OTP-12057  When starting an ssh-daemon giving the option
	      {parallel_login, true}, the timeout for authentication
	      negotiation ({negotiation_timeout, integer()}) was never
	      removed.

	      This caused the session to always be terminated after the
	      timeout if parallel_login was set.

   OTP-12119  Warning: this is experimental and may disappear or change
	      without previous warning.

	      Experimental support for running Quickcheck and PropEr tests
	      from common_test suites is added to common_test. See the
	      reference manual for the new module ct_property_testing.

	      Experimental property tests are added under
	      lib/{inet,ssh}/test/property_test. They can be run directly
	      or from the common_test suites
	      inet/ftp_property_test_SUITE.erl and
	      ssh/test/ssh_property_test_SUITE.erl.

	      See the code in the test directories and the man page for
	      details.

	      (Thanks to Tuncer Ayaz for a patch adding Triq)

--- ssl-5.3.6 -----------------------------------------------------------

   OTP-12026  Corrected handling of ECC certificates, there where several
	      small issues with the handling of such certificates in the
	      ssl and public_key application. Now ECC signed ECC
	      certificates shall work and not only RSA signed ECC
	      certificates.

   OTP-12048  Add decode functions for SNI (Server Name Indication)

   OTP-12149  Check that the certificate chain ends with a trusted ROOT CA
	      e.i. a self-signed certificate, but provide an option
	      partial_chain to enable the application to define an
	      intermediate CA as trusted.

--- stdlib-2.2 ----------------------------------------------------------

   OTP-11800  The type spec of the FormFunc argument to sys:handle_debug/4
	      was erroneously pointing to dbg_fun(). This is now corrected
	      and the new type is format_fun().

   OTP-11967  Behaviors such as gen_fsm and gen_server should always invoke
	      format_status/2 before printing the state to the logs.

   OTP-12024  The documentation of dets:insert_new/2 has been corrected.
	      (Thanks to Alexei Sholik for reporting the bug.)

   OTP-12041  Printing a term with io_lib:format and control sequence w,
	      precision P and field width F, where F< P would fail in one
	      of the two following ways:

	      1) If P < printed length of the term, an infinite loop would
	      be entered, consuming all available memory.

	      2) If P >= printed length of the term, an exception would be
	      raised.

	      These two problems are now corrected.

   OTP-12055  The documentation of <code>maps:values/1</code> has been
	      corrected.

   OTP-12063  Expand shell functions in map expressions.

   OTP-12137  Add maps:with/2

--- tools-2.7 -----------------------------------------------------------

   OTP-12059  Add log2 histogram to lcnt for lock wait time

--- wx-1.3.1 ------------------------------------------------------------

   OTP-12153  Implement --enable-sanitizers[=sanitizers]. Similar to
	      debugging with Valgrind, it's very useful to enable
	      -fsanitize= switches to catch bugs at runtime.

--- Open Source Contributors --------------------------------------------
    
   Thanks to: Alex Wilson, András Veres-Szentkirályi, Anthony Ramine, 
              Derek Brown, Garret Smith, Igor Savchuk, James Fish, 
              Johannes Weißl, Louis-Philippe Gauthier, Luca Favatella, 
              Luis Rascão, Magnus Henoch, Michael K. Schmidt, 
              Michael Truog, Rick Reed, Sergey Kudryashov, Slava Yurin, 
              Steve Vinoski, Tuncer Ayaz, Vlad Dumitrescu, Wasif Malik, 
              Yuki Ito, kudryashov-sv, lharc, pascalchap