Erlang/OTP 17.4

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.4
Bug fix release : otp_src_17.4
Build date      : 2014-12-10

This is 17.4, the fourth 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.4.readme (this file)

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

  http://www.erlang.org/download/otp_src_17.4.tar.gz
  http://www.erlang.org/download/otp_win32_17.4.exe
  http://www.erlang.org/download/otp_win64_17.4.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.4.tar.gz
  http://www.erlang.org/download/otp_doc_man_17.4.tar.gz

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

The OTP Team

--- HIGHLIGHTS ----------------------------------------------------------

   OTP-11542  == ssh ==

	      Added API functions ptty_alloc/3 and ptty_alloc/4, to
	      allocate a pseudo tty.

   OTP-12171  == eldap ==

	      Nearly all TCP options are possible to give in the
	      eldap:open/2 call.

--- otp -----------------------------------------------------------------

   OTP-12280  Fixed the --without-<APPLICATION> option of configure.

	      Thanks to Tuncer Ayaz.

   OTP-12327  The type function() has been documented.

--- asn1-3.0.3 ----------------------------------------------------------

   OTP-12205  When decoding BER, primitives with an indefinite length will
	      be immediately rejected. (Thanks to Simon Cornish for
	      reporting this bug.)

   OTP-12318  BER: A bug with compliance to X.680 (200811) s31.2.7 has been
	      fixed. Basically, when TagDefault is AUTOMATIC then tags are
	      IMPLICIT unless EXPLICIT is given.

   OTP-12326  Usage of the EXTERNAL 1994 variant type was broken.

--- common_test-1.9 -----------------------------------------------------

   OTP-11766  The source code to html code generator in Test Server (and
	      Common Test) would fail to generate anchors in the html code
	      for functions with non-expandable macros, resulting in bad
	      html links to such functions. This correction lets the code
	      generator ignore macros that can't be expanded (i.e. not
	      pre-process them), so that correct anchors will always be
	      produced.

   OTP-12031  OTP-11971 erroneously changed the handling of relative paths
	      (import/export files) specified in the cover spec file. This
	      is now corrected so these are expected to be relative to the
	      directory where the cover spec file itself is stored.

   OTP-12159  Common Test would sometimes crash while trying to print large
	      amounts of SASL reports to log on a computer with a slow file
	      system. This problem (due to an error in IO message buffering
	      in ct_logs) has been fixed.

   OTP-12252  A new option, {newline,boolean()} is added to all functions
	      in ct_telnet that send data (command strings) to the telnet
	      server. By default, ct_telnet adds a newline to all command
	      strings, and by setting the new option to false this behavior
	      is turned off.

   OTP-12329  The common_test telnet client, ct_telnet and friends, had
	      some unstable test cases. Some of these were caused by the
	      unix_telnet callback sending an extra newline after sending
	      the password. This caused the sever to send an extra prompt
	      back which confused the tests. The extra newline is no longer
	      sent.

	      Also, debug printouts and logging from the telnet client is
	      improved, and some test cases are slightly modified in order
	      to stabilize the test.

   OTP-12334  ct_netconfc did not expect the return value {error,timeout}
	      from ssh_connection:subsystem/4. This has been corrected.

   OTP-12348  Distribute autoconf helpers to applications at build time
	      instead of having multiple identical copies committed in the
	      repository.

--- compiler-5.0.3 ------------------------------------------------------

   OTP-12262  Named funs with the same name and arity could get mixed up
	      with each other.

   OTP-12347  Coalesce map keys in dialyzer mode

	      This fixes a regression introduced in commit
	      805f9c89fc01220bc1bb0f27e1b68fd4eca688ba The problem occurred
	      with compounded map keys compiled with dialyzer option turned
	      on, '+dialyzer'.

	      Reported by: Ivan Uemlianin

--- crypto-3.4.2 --------------------------------------------------------

   OTP-12215  Add configure option --with-ssl-incl=PATH to support OpenSSL
	      installations with headers and libraries at different places.

   OTP-12316  Add configure option --with-ssl-rpath to control which
	      runtime library path to use for dynamic linkage toward
	      OpenSSL.

--- debugger-4.0.2 ------------------------------------------------------

   OTP-12197  Make sure to install .hrl files when needed

   OTP-12357  Invoking debugger functions ia/1 and iaa/1 crashed, when it
	      tried to invoke the old and removed gs based gui functions.

--- dialyzer-2.7.3 ------------------------------------------------------

   OTP-12225  When compiling Erlang source, Dialyzer now ignores the
	      environment variable ERL_COMPILER_OPTIONS as well as skips
	      the Erlang Compiler option warnings_as_errors.

   OTP-12319  Dialyzer did not check the type of record elements when
	      updating them. The bug, introduced in Erlang/OTP 17.1, has
	      been corrected. (Thanks to Nicolas Dudebout for pointing it
	      out.)

   OTP-12347  Coalesce map keys in dialyzer mode

	      This fixes a regression introduced in commit
	      805f9c89fc01220bc1bb0f27e1b68fd4eca688ba The problem occurred
	      with compounded map keys compiled with dialyzer option turned
	      on, '+dialyzer'.

	      Reported by: Ivan Uemlianin

--- diameter-1.8 --------------------------------------------------------

   OTP-12196  Fix remote diameter_request table leak.

	      An outgoing request whose pick_peer callback selected a
	      transport on another node resulted in an orphaned table entry
	      on that node.

   OTP-12233  Fix handling of 3xxx Result-Code without E-bit.

	      OTP-12233 broke the population of the errors field of the
	      diameter_packet record when an incoming request with an
	      E-bit/Result-Code mismatch was detected, causing a 4-tuple to
	      be inserted as Result-Code in a diameter_avp record.

   OTP-12281  Fix ignored connect timer.

	      There are two timers governing the establishment of peer
	      connections: connect_timer and watchdog_timer. The former is
	      the RFC 6733 Tc timer, and is used at initial connection
	      establishment. The latter is RFC 3539 TwInit, and is used for
	      connection reestablishment. A connecting transport
	      erroneously used watchdog_timer in both cases.

   OTP-12308  Order candidate peers in pick_peer callbacks.

	      The order of candidate peers presented to a diameter_app(3)
	      pick_peer callback has previously not been documented, but
	      there are use cases that are simplified by an ordering. The
	      order is now determined by the filter.

--- edoc-0.7.16 ---------------------------------------------------------

   OTP-12190  Maps: Properly align union typed assoc values in
	      documentation

--- eldap-1.1 -----------------------------------------------------------

   OTP-12171  Nearly all TCP options are possible to give in the
	      eldap:open/2 call.

   OTP-12174  Added the LDAP filter extensibleMatch.

   OTP-12311  Fixed that eldap:open did not use the Timeout parameter when
	      calling ssl:connect. (Thanks Wiesław Bieniek for reporting)

--- erl_docgen-0.3.7 ----------------------------------------------------

   OTP-12190  Maps: Properly align union typed assoc values in
	      documentation

--- erl_interface-3.7.20 ------------------------------------------------

   OTP-12178  Added a .app file for the application.

   OTP-12268  Use C99 function isfinite() instead of finite() when
	      available on non GCC compilers.

   OTP-12348  Distribute autoconf helpers to applications at build time
	      instead of having multiple identical copies committed in the
	      repository.

   OTP-12358  Added an .appup file for the application.

--- erts-6.3 ------------------------------------------------------------

   OTP-12117  Introduced support for eager check I/O.

	      By default eager check I/O will be disabled, but this will
	      most likely be changed in OTP 18. When eager check I/O is
	      enabled, schedulers will more frequently check for I/O work.
	      Outstanding I/O operations will however not be prioritized to
	      the same extent as when eager check I/O is disabled.

	      Eager check I/O can be enabled using the erl command line
	      argument: +secio true

	      Characteristics impact when enabled:

	      -- Lower latency and smoother management of externally
	      triggered I/O operations.

	      -- A slightly reduced priority of externally triggered I/O
	      operations.

   OTP-12188  Fix HiPE debug lock checking on OS X 64bit

	      Position-independent code is mandatory on OS X. We use r11 as
	      an intermediate register to fill BIF_P->hipe.bif_callee. This
	      fixes the following error when doing `make debug FLAVOR=smp`:

	      clang -cc1as: fatal error: error in backend: 32-bit absolute
	      addressing is not supported in 64-bit mode

   OTP-12189  Fix erts .app-file

   OTP-12208  Fix race bug that could cause VM crash in
	      erlang:port_get_data/1 if the port was closed by a concurrent
	      process. Also fix fatal bug if port_set_data/2 is called with
	      a non-immediate data term. Both bugs exist since R16B01.

   OTP-12215  Add configure option --with-ssl-incl=PATH to support OpenSSL
	      installations with headers and libraries at different places.

   OTP-12216  Correct make variable SSL_DED_LD_RUNTIME_LIBRARY_PATH when
	      erl_xcomp_sysroot ends with a slash.

   OTP-12222  Fix two cases of unreachable code caused by false use of
	      assigment operators.

   OTP-12231  Fix bug when hipe compiled code makes tail call to a BIF that
	      disables GC while trapping (sush as binary_to_list,
	      list_to_binary, binary_to_term, term_to_binary).

   OTP-12249  Fix bug when a migrated empty memory carrier is reused just
	      before it should be destroyed by the thread that created it.

   OTP-12250  Optimization of atomic memory operations with release barrier
	      semantics on 32-bit PowerPC when using the implementation
	      included in OTP.

   OTP-12266  Prevents compile-time errors in NIFs, when the compiler is
	      instructed to treat missing field initializers as errors, by
	      adding an initializer for the new options field which was
	      added to ErlNifEntry for 17.3.

   OTP-12267  Fixed CPU topology detection on FreeBSD systems where
	      Erlang/OTP is compiled by new C compilers (including, but
	      possibly not limited to, gcc 4.9 and clang).

   OTP-12268  Use C99 function isfinite() instead of finite() when
	      available on non GCC compilers.

   OTP-12269  Fix bug on windows where an incorrect number of links could
	      be returned when doing file:read_file_info on a directory.

   OTP-12273  Fix rare bug when purging module on VM started with +Meamin.

   OTP-12275  Repair run_erl terminal window size adjustment sent from
	      to_erl. This was broken in OTP 17.0 which could lead to
	      strange cursor behaviour in the to_erl shell.

   OTP-12287  Minor adjustment of scheduler activation code making sure
	      that an activation of a scheduler is not prevented by its
	      run-queue being non-empty. (Thanks to Songlu Cai)

   OTP-12289  Fixed bug on windows causing gen_tcp/udp to return an error
	      when given an fd to work with.

   OTP-12290  Fix various internal erts issues where negating a signed
	      integer in C would trigger undefined behavior. This fixes
	      issues when dividing with bignums and list_to_integer.

   OTP-12291  When flushing output to stdout on windows, the emulator could
	      sometimes hang indefinitely waiting for the flush to
	      complete. This has been fixed.

   OTP-12295  Fix so that non-smp emulators with dirty scheduler support
	      shows the correct number of dirty schedulers when calling
	      erlang:system_info(system_version).

   OTP-12298  Add nif_version to erlang:system_info/1 in order to get the
	      NIF API version of the runtime system in a way similar to
	      driver_version.

   OTP-12300  Fix bug that could cause the return value from dirty NIF with
	      zero arity to be treated as garbage, leading to VM crash.

   OTP-12302  Improved support for atomic memory operations provided by the
	      libatomic_ops library. Most importantly support for use of
	      native double word atomics when implemented by libatomic_ops
	      (for example, implemented for ARM).

	      The $ERL_TOP/HOWTO/INSTALL.md document now also more clearly
	      describes when you want to build together with a
	      libatomic_ops installation.

   OTP-12316  Add configure option --with-ssl-rpath to control which
	      runtime library path to use for dynamic linkage toward
	      OpenSSL.

   OTP-12321  Added systemd notify support to epmd

   OTP-12323  Improve allocation carrier migration search logic. This will
	      reduce the risk of failed migrations that could lead to
	      excess memory consumption. It will also improve smp
	      performance due to reduced memory contention on the migration
	      pool.

--- eunit-2.2.9 ---------------------------------------------------------

   OTP-12197  Make sure to install .hrl files when needed

   OTP-12200  Make sure the clean rule for ssh, ssl, eunit and otp_mibs
	      actually removes generated files.

--- hipe-3.11.2 ---------------------------------------------------------

   OTP-12322  Fixed internal elf_format hrl file to contain valid erlang

--- inets-5.10.4 --------------------------------------------------------

   OTP-12221  Fixed a spelling mistake in httpc documentation.

   OTP-12255  Add option {ftp_extension, boolean} to enable use of extended
	      commands EPSV and EPRT, as specified in RFC 2428, for IPv4
	      instead of using the legacy commands. Ipv6 can not be
	      supported without the extended commands.

--- jinterface-1.5.12 ---------------------------------------------------

   OTP-12178  Added a .app file for the application.

   OTP-12210  handle empty .erlang.cookie without crashing and
	      OtpErlangList.clone must not return null

   OTP-12211  This fixes all the compilation warnings in the Java code

   OTP-12358  Added an .appup file for the application.

--- kernel-3.1 ----------------------------------------------------------

   OTP-12197  Make sure to install .hrl files when needed

   OTP-12276  Removed the undocumented application environment variable
	      'raw_files' from the kernel application. This variable was
	      checked (by call to application:get_env/2) each time a raw
	      file was to be opened in the file module.

   OTP-12296  Updated documentation for inet buffer size options.

   OTP-12314  A bug has been fixed when using the netns option to gen_udp,
	      which accidentally only worked if it was the last option.

   OTP-12325  Introduce new option 'raw' in file_info and link_info
	      functions. This option allows the caller not to go through
	      the file server for information about files guaranteed to be
	      local.

--- megaco-3.17.3 -------------------------------------------------------

   OTP-12348  Distribute autoconf helpers to applications at build time
	      instead of having multiple identical copies committed in the
	      repository.

--- mnesia-4.12.4 -------------------------------------------------------

   OTP-12278  Fixed a spelling mistake in mnesia documentation.

   OTP-12304  Matching data with mnesia:match_object/1 did not work as
	      expected in some cases, when data was written in the same
	      transaction before the matching was invoked.

--- observer-2.0.3 ------------------------------------------------------

   OTP-12078  A note saying only R15B nodes can be observed is removed from
	      the user guide.

--- odbc-2.10.22 --------------------------------------------------------

   OTP-12260  OS X Mavericks is based on Darwin version 13.x, and Yosemite
	      on 14.x. Change the ODBC configure.in script to recognize
	      these versions.

   OTP-12346  The commands longer than 127 chars sent to odbc server
	      crashed it, e.g. a connection string with driver path and
	      some additional parameters.

   OTP-12348  Distribute autoconf helpers to applications at build time
	      instead of having multiple identical copies committed in the
	      repository.

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

   OTP-12193  Fixed problem with IPv6 addresses in Service Context when
	      Orber is default configured for IPv4.

--- ose -----------------------------------------------------------------

   OTP-12177  Add missing release notes for the OSE application.

--- otp_mibs-1.0.10 -----------------------------------------------------

   OTP-12200  Make sure the clean rule for ssh, ssl, eunit and otp_mibs
	      actually removes generated files.

--- parsetools-2.0.12 ---------------------------------------------------

   OTP-12238  The line counter becomes invalid when rules with linewrap are
	      used. This issue appears because the parsing FSM does not
	      roll back the line counter after attempting such a rule.

--- percept-0.8.10 ------------------------------------------------------

   OTP-12197  Make sure to install .hrl files when needed

--- runtime_tools-1.8.15 ------------------------------------------------

   OTP-12298  Add nif_version to erlang:system_info/1 in order to get the
	      NIF API version of the runtime system in a way similar to
	      driver_version.

--- snmp-5.1.1 ----------------------------------------------------------

   OTP-12066  [compiler] Refinement of type Opaque was not allowed. MIB
	      constructs such as "SYNTAX Opaque (SIZE(0..65535))" was
	      previously not allowed, this has now been fixed. See the
	      standard ALARM-MIB for eaxmple.

--- ssh-3.1 -------------------------------------------------------------

   OTP-11329  Fix option user_interaction to work as expected. When
	      password authentication is implemented with ssh
	      keyboard-interactive method and the password is already
	      supplied, so that we do not need to query user, then
	      connections should succeed even though user_interaction
	      option is set to false.

   OTP-11542  Added API functions ptty_alloc/3 and ptty_alloc/4, to
	      allocate a pseudo tty.

   OTP-12157  Gracefully handle bad data from the client when expecting ssh
	      version exchange.

   OTP-12168  When restarting an ssh daemon, that was stopped with
	      ssh:stop_listner/ [1,2] new options given shall replace old
	      ones.

   OTP-12180  Supports tar file creation on other media than file systems
	      mounted on the local machine.

	      The erl_tar api is extended with erl_tar:init/3 that enables
	      usage of user provided media storage routines. A ssh-specific
	      set of such routines is hidden in the new function
	      ssh_sftp:open_tar/3 to simplify creating a tar archive on a
	      remote ssh server.

	      A chunked file reading option is added to erl_tar:add/3,4 to
	      save memory on e.g small embedded systems. The size of the
	      slices read from a file in that case can be specified.

   OTP-12185  Always send SSH_DISCONNECT protocol messages when peer sends
	      corrupt messages.

   OTP-12194  The option parallel_login didn't work with the value true.
	      All logins were serial.

   OTP-12200  Make sure the clean rule for ssh, ssl, eunit and otp_mibs
	      actually removes generated files.

   OTP-12247  Fixes of login blocking after port scanning.

   OTP-12256  Improved Property Tests (Thanks to Thomas, John and Tobias at
	      QuviQ)

   OTP-12277  Correct typo of renegotiate that could cause rekeying to fail

   OTP-12306  The {timeout, Timeout} option passed to
	      ssh_sftp:start_channel was not applied to the early phases of
	      the SSH protocol. This patch passes the Timeout through to
	      ssh:connect. In case the timeout occurs during these phases,
	      {error, timeout} is returned. (Thanks to Simon Cornish)

   OTP-12312  Hooks for funs that can change binaries sent to remote sites
	      from erl_tar for renote tar file creation are added. See
	      ssh_sftp:open_tar/3,4 for details. The hooks could also be
	      used to read remote tar files that need transformation before
	      file extraction.

	      Those hooks are intended for encryption and decryption of tar
	      files. Effort is put into memory, disk and network resource
	      economy.

--- ssl-5.3.8 -----------------------------------------------------------

   OTP-12198  Handle the fact that servers may send an empty SNI extension
	      to the client.

   OTP-12200  Make sure the clean rule for ssh, ssl, eunit and otp_mibs
	      actually removes generated files.

   OTP-12341  Change code to reflect that state data may be secret to avoid
	      breaking dialyzer contracts.

--- stdlib-2.3 ----------------------------------------------------------

   OTP-12036  The documentation of string:tokens/2 now explicitly specifies
	      that adjacent separator characters do not give any empty
	      strings in the resulting list of tokens.

   OTP-12180  Supports tar file creation on other media than file systems
	      mounted on the local machine.

	      The erl_tar api is extended with erl_tar:init/3 that enables
	      usage of user provided media storage routines. A ssh-specific
	      set of such routines is hidden in the new function
	      ssh_sftp:open_tar/3 to simplify creating a tar archive on a
	      remote ssh server.

	      A chunked file reading option is added to erl_tar:add/3,4 to
	      save memory on e.g small embedded systems. The size of the
	      slices read from a file in that case can be specified.

   OTP-12187  Fix broken deprecation warnings in ssh application

   OTP-12190  Maps: Properly align union typed assoc values in
	      documentation

   OTP-12212  Fix filelib:wildcard/2 when 'Cwd' ends with a dot

   OTP-12213  Allow Name/Arity syntax in maps values inside attributes.

   OTP-12224  Fix edlin to correctly save text killed with ctrl-u. Prior to
	      this fix, entering text into the Erlang shell and then
	      killing it with ctrl-u followed by yanking it back with
	      ctrl-y would result in the yanked text being the reverse of
	      the original killed text.

   OTP-12263  If a callback function was terminated with exit/1, there
	      would be no stack trace in the ERROR REPORT produced by
	      gen_server. This has been corrected.

	      To keep the backwards compatibility, the actual exit reason
	      for the process is not changed.

   OTP-12264  Warnings produced by ms_transform could point out the wrong
	      line number.

   OTP-12315  I/O requests are optimized for long message queues in the
	      calling process.

--- syntax_tools-1.6.17 -------------------------------------------------

   OTP-12265  Teach Maps to erl_syntax

	      Affected functions:

	      -- erl_syntax:abstract/1

	      -- erl_syntax:concrete/1

	      -- erl_syntax:is_leaf/1

	      -- erl_syntax:is_literal/1

--- test_server-3.7.2 ---------------------------------------------------

   OTP-11766  The source code to html code generator in Test Server (and
	      Common Test) would fail to generate anchors in the html code
	      for functions with non-expandable macros, resulting in bad
	      html links to such functions. This correction lets the code
	      generator ignore macros that can't be expanded (i.e. not
	      pre-process them), so that correct anchors will always be
	      produced.

   OTP-12197  Make sure to install .hrl files when needed

   OTP-12348  Distribute autoconf helpers to applications at build time
	      instead of having multiple identical copies committed in the
	      repository.

--- tools-2.7.1 ---------------------------------------------------------

   OTP-12214  Fixed a typo in erlang-mode comment.

   OTP-12283  Add a skeleton for -spec in Erlang mode for Emacs

   OTP-12328  Cover no longer crashes when compiling receive and the like
	      with just an after clause. Thanks to José Valim for
	      providing a fix.

--- wx-1.3.2 ------------------------------------------------------------

   OTP-12259  Fixed a minor typo in the graphicsContext example.

   OTP-12348  Distribute autoconf helpers to applications at build time
	      instead of having multiple identical copies committed in the
	      repository.

--- Open Source Contributors --------------------------------------------
 
   Thanks to: Andrey Tsirulev, Anthony Ramine, Christopher Faulet, 
              David N. Welton, Derek Brown, Dmitry Belyaev, Emil Holmström, 
              Evgeny M, Garret Smith, Jani Hakala, Josh Adams, José Valim, 
              Kirill Zaborsky, Magnus Henoch, Matwey V. Kornilov, Olle Mattsson, 
              Paul Guyot, Peter Lemenkov, Sebastian Strollo, Simon Cornish, 
              Sina Samavati, Steve Vinoski, Thomas Arts, Tuncer Ayaz, 
              Vlad Dumitrescu, Vladimir Shmalko, Yuki Ito, adelzhang, archimed, 
              dcy, goofansu, jmrepetti