Erlang/OTP 21.2

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:21.2

Highlights #

OTP-13468
Application(s):
erts, sasl

New counters and atomics modules supplies access to highly efficient operations on mutable fixed word sized variables.

OTP-14669
Application(s):
erts
Related Id(s):
PR-1989

There is a new module persistent_term that implements a term storage suitable for terms that are frequently used but never or infrequently updated. Lookups are done in constant time without copying the terms.

OTP-15094
Application(s):
ssh
Related Id(s):
OTP-15419

Added public key methods ssh-ed25519 and ssh-ed448.

Requires OpenSSL 1.1.1 or higher as cryptolib under the OTP application crypto.

OTP-15449
Application(s):
ssl

*** POTENTIAL INCOMPATIBILITY ***

ssl now uses active n internally to boost performance. Old active once behavior can be restored by setting application variable see manual page for ssl application (man 6).

OTP-15475
Application(s):
erts
Related Id(s):
ERIERL-229

Add a new pollset that is made to handle sockets that use {active, true} or {active, N}. The new pollset will not be polled by a pollthread, but instead polled by a normal scheduler.

This change was made because of the overhead associated with constantly having to re-apply the ONESHOT mechanism on fds that all input events were interesting.

The new pollset is only active on platforms that support concurrent kernel poll updates, i.e. Linux and BSD.

Potential Incompatibilities #

OTP-15364
Application(s):
kernel

A new function, logger:update_handler_config/3 is added, and the handler callback changing_config now has a new argument, SetOrUpdate, which indicates if the configuration change comes from set_handler_config/2,3 or update_handler_config/2,3.

This allows the handler to consistently merge the new configuration with the old (if the change comes from update_handler_config/2,3) or with the default (if the change comes from set_handler_config/2,3).

The built-in handlers logger_std_h and logger_disk_log_h are updated accordingly. A bug which could cause inconsistency between the handlers' internal state and the stored configuration is also corrected.

OTP-15449
Application(s):
ssl

*** HIGHLIGHT ***

ssl now uses active n internally to boost performance. Old active once behavior can be restored by setting application variable see manual page for ssl application (man 6).

asn1-5.0.8 #

The asn1-5.0.8 application can be applied independently of other applications on a full OTP 21 installation.

OTP-15470
Application(s):
asn1
Related Id(s):
ERIERL-278

Handle erroneous length during decode (BER only) without crashing.

Full runtime dependencies of asn1-5.0.8: erts-7.0, kernel-3.0, stdlib-2.0

compiler-7.3 #

The compiler-7.3 application can be applied independently of other applications on a full OTP 21 installation.

OTP-15400
Application(s):
compiler
Related Id(s):
ERL-759

Fixed a rare internal consistency failure caused by a bug in the beam_jump pass. (Thanks to Simon Cornish for reporting this bug.)

OTP-15435
Application(s):
compiler
Related Id(s):
ERL-778

The compiler could fail with an internal consistency check failure when compiling code that used the is_function/2 BIF.

OTP-15437
Application(s):
compiler, stdlib
Related Id(s):
ERL-762

When an external fun was used, warnings for unused variables could be suppressed.

OTP-15481
Application(s):
compiler

The compiler would crash when compiling an after block that called erlang:raise/3 like this: erlang:raise(Class, Stacktrace, Stacktrace)

OTP-15245
Application(s):
compiler, stdlib
Related Id(s):
ERL-706

When specified, the +{source,Name} option will now override the actual file name in stack traces, instead of only affecting the return value of Mod:module_info().

The +deterministic flag will also affect stack traces now, omitting all path information except the file name, fixing a long-standing issue where deterministic builds required deterministic paths.

Full runtime dependencies of compiler-7.3: crypto-3.6, erts-9.0, hipe-3.12, kernel-4.0, stdlib-2.5

crypto-4.4 #

The crypto-4.4 application can be applied independently of other applications on a full OTP 21 installation.

OTP-15302
Application(s):
crypto

Updated the RSA options part in the crypto application's C-code, documentation and tests.

OTP-15419
Application(s):
crypto, public_key
Related Id(s):
OTP-15094

Added ed25519 and ed448 sign/verify.

Requires OpenSSL 1.1.1 or higher as cryptolib under the OTP application crypto.

OTP-15467
Application(s):
crypto

Fixed valgrind warnings.

Full runtime dependencies of crypto-4.4: erts-9.0, kernel-5.3, stdlib-3.4

erts-10.2 #

Note! The erts-10.2 application can *not* be applied independently of other applications on an arbitrary OTP 21 installation. On a full OTP 21 installation, also the following runtime dependencies have to be satisfied: -- kernel-6.1 (first satisfied in OTP 21.1) -- sasl-3.3 (first satisfied in OTP 21.2)

OTP-12242
Application(s):
erts
Related Id(s):
ERL-561

When a process was waiting for a TCP socket send operation to complete, and another process closed the socket during that send, the sending process could hang. This bug has now been corrected.

OTP-15343
Application(s):
erts, stdlib
Related Id(s):
PR-1962

Document bit_size in match specifications and allow it in ets:fun2ms.

OTP-15346
Application(s):
erts

Fixed bug in ets:select_replace when called with a fully bound key could cause a following call to ets:next or ets:prev to crash the emulator or return invalid result.

OTP-15360
Application(s):
erts

When a module has been purged from memory, any literals belonging to that module will be copied to all processes that hold references to them. The max heap size limit would be ignored in the garbage collection initiated when copying literals to a process. If the max heap size was exceeded, the process would typically be terminated in the following garbage collection. Corrected to terminate the process directly if copying a literal would exceed the max heap size.

OTP-15389
Application(s):
erts

Fix compilation of run_erl on Solaris 11.4 and later.

OTP-15436
Application(s):
erts

Fixed a bug where lists:reverse/1-2 could use far too many reductions. This bug was introduced in OTP 21.1.

OTP-15446
Application(s):
erts
Related Id(s):
PR-2024

Fixed a bug where a dirty scheduler could stay awake forever if a distribution entry was removed as part of a dirty GC.

OTP-15450
Application(s):
erts
Related Id(s):
ERIERL-229

Fix microstate accounting handing in various places. Most importantly the GC states when the GC is run on a dirty scheduler are now managed correctly.

OTP-15461
Application(s):
erts
Related Id(s):
ERL-784

Fixed bug in file:sendfile when the send operation failed. For sockets in active modes it could cause emulator crash or a hanging call. For sockets with {active,false} an unexpected {inet_reply, _, _} message could be sent to the calling process. The bug exists since OTP-21.0.

OTP-15465
Application(s):
erts

The erts configure script has been updated to reject any CFLAGS that does not have -O. This in order to prevent the common mistake of forgetting to add -O2 to custom CFLAGS.

OTP-15474
Application(s):
erts, stdlib
Related Id(s):
ERIERL-229

Fix reduction count in lists:member/2

OTP-13468
Application(s):
erts, sasl

*** HIGHLIGHT ***

New counters and atomics modules supplies access to highly efficient operations on mutable fixed word sized variables.

OTP-14669
Application(s):
erts
Related Id(s):
PR-1989

*** HIGHLIGHT ***

There is a new module persistent_term that implements a term storage suitable for terms that are frequently used but never or infrequently updated. Lookups are done in constant time without copying the terms.

OTP-15121
Application(s):
erts, kernel
Related Id(s):
ERIERL-189 , PR-1974

A function inet:getifaddrs/1 that takes a list with a namespace option has been added, for platforms that support that feature, for example Linux (only?).

OTP-15357
Application(s):
erts, kernel
Related Id(s):
ERL-698

Added the nopush option for TCP sockets, which corresponds to TCP_NOPUSH on *BSD and TCP_CORK on Linux.

This is also used internally in file:sendfile to reduce latency on subsequent send operations.

OTP-15371
Application(s):
erts, stdlib

List subtraction (The -- operator) will now yield properly on large inputs.

OTP-15471
Application(s):
erts, kernel
Related Id(s):
ERIERL-229

Optimize handling of send_delay for tcp sockes to better work with the new pollthread implementation introduced in OTP-21.

OTP-15472
Application(s):
erts
Related Id(s):
ERIERL-229

Optimize driver_set_timer with a zero timeout to short-circuit and not create any timer structure, but instead schedule the timer immediately.

OTP-15473
Application(s):
erts
Related Id(s):
ERIERL-229

Add erl_xcomp_code_model_small as a cross configure variable in order to let the emulator be build with the assumption that a small code model will be used on the target machine.

OTP-15475
Application(s):
erts
Related Id(s):
ERIERL-229

*** HIGHLIGHT ***

Add a new pollset that is made to handle sockets that use {active, true} or {active, N}. The new pollset will not be polled by a pollthread, but instead polled by a normal scheduler.

This change was made because of the overhead associated with constantly having to re-apply the ONESHOT mechanism on fds that all input events were interesting.

The new pollset is only active on platforms that support concurrent kernel poll updates, i.e. Linux and BSD.

OTP-15478
Application(s):
erts
Related Id(s):
ERL-741

Fix bug where emulator would segfault if a literal message was sent when sequence tracing was enabled.

Full runtime dependencies of erts-10.2: kernel-6.1, sasl-3.3, stdlib-3.5

et-1.6.4 #

The et-1.6.4 application can be applied independently of other applications on a full OTP 21 installation.

OTP-15463
Application(s):
et
Related Id(s):
ERL-780

The scroll bar of the et_viewer window could not be dragged all the way to the top of the window. It would always stop at the second event. This is now corrected.

Full runtime dependencies of et-1.6.4: erts-9.0, kernel-5.3, runtime_tools-1.10, stdlib-3.4, wx-1.2

hipe-3.18.2 #

The hipe-3.18.2 application can be applied independently of other applications on a full OTP 21 installation.

OTP-15482
Application(s):
hipe

The code was updated to avoid causing a dialyzer warning because of a tightened spec for beam_lib:info/1.

Full runtime dependencies of hipe-3.18.2: compiler-5.0, erts-9.3, kernel-5.3, stdlib-3.4, syntax_tools-1.6.14

inets-7.0.3 #

The inets-7.0.3 application can be applied independently of other applications on a full OTP 21 installation.

OTP-15338
Application(s):
inets
Related Id(s):
ERL-733

Fixed http client to not send 'content-length' header in chunked encoded requests.

OTP-15339
Application(s):
inets
Related Id(s):
ERL-736

Fixed http client to not drop explicit 'Content-Type' header in requests without a body such as requests with the 'Content-Type' of application/x-www-form-urlencoded.

Full runtime dependencies of inets-7.0.3: erts-6.0, kernel-3.0, mnesia-4.12, runtime_tools-1.8.14, ssl-5.3.4, stdlib-3.5

kernel-6.2 #

Note! The kernel-6.2 application can *not* be applied independently of other applications on an arbitrary OTP 21 installation. On a full OTP 21 installation, also the following runtime dependency has to be satisfied: -- erts-10.1 (first satisfied in OTP 21.1)

OTP-15364
Application(s):
kernel

*** POTENTIAL INCOMPATIBILITY ***

A new function, logger:update_handler_config/3 is added, and the handler callback changing_config now has a new argument, SetOrUpdate, which indicates if the configuration change comes from set_handler_config/2,3 or update_handler_config/2,3.

This allows the handler to consistently merge the new configuration with the old (if the change comes from update_handler_config/2,3) or with the default (if the change comes from set_handler_config/2,3).

The built-in handlers logger_std_h and logger_disk_log_h are updated accordingly. A bug which could cause inconsistency between the handlers' internal state and the stored configuration is also corrected.

OTP-15388
Application(s):
kernel
Related Id(s):
PR-1983

Fix fallback when custom erl_epmd client does not implement address_please.

OTP-15453
Application(s):
kernel
Related Id(s):
ERL-782

The logger ets table did not have the read_concurrency option. This is now added.

OTP-15466
Application(s):
kernel
Related Id(s):
ERL-788

During system start, logger has a simple handler which prints to stdout. After the kernel supervision is started, this handler is removed and replaced by the default handler. Due to a bug, logger earlier issued a debug printout saying it received an unexpected message, which was the EXIT message from the simple handler's process. This is now corrected. The simple handler's process now unlinks from the logger process before terminating.

OTP-15469
Application(s):
kernel

The logger handler logger_std_h would not re-create it's log file if it was removed. Due to this it could not be used with tools like 'logrotate'. This is now corrected.

OTP-15121
Application(s):
erts, kernel
Related Id(s):
ERIERL-189 , PR-1974

A function inet:getifaddrs/1 that takes a list with a namespace option has been added, for platforms that support that feature, for example Linux (only?).

OTP-15357
Application(s):
erts, kernel
Related Id(s):
ERL-698

Added the nopush option for TCP sockets, which corresponds to TCP_NOPUSH on *BSD and TCP_CORK on Linux.

This is also used internally in file:sendfile to reduce latency on subsequent send operations.

OTP-15471
Application(s):
erts, kernel
Related Id(s):
ERIERL-229

Optimize handling of send_delay for tcp sockes to better work with the new pollthread implementation introduced in OTP-21.

Full runtime dependencies of kernel-6.2: erts-10.1, sasl-3.0, stdlib-3.5

observer-2.8.2 #

The observer-2.8.2 application can be applied independently of other applications on a full OTP 21 installation.

OTP-15365
Application(s):
observer
Related Id(s):
ERL-722

Literals such as #{"one"=>1} dumped to a crash dump would cause crashdump_viewer to crash.

OTP-15377
Application(s):
observer

crashdump_viewer would sometimes crash when processing a dump which was truncated in the literals area. This is now corrected.

OTP-15391
Application(s):
observer

Since OTP-20.2, crashdump_viewer was very slow when opening a crash dump with many processes. An ets:select per process could be removed, which improved the performance a lot.

A bug when parsing heap data in a crashdump caused crashdump_viewer to crash when multiple Yc lines referenced the same reference counted binary. This is now corrected.

Full runtime dependencies of observer-2.8.2: erts-7.0, et-1.5, kernel-3.0, runtime_tools-1.8.14, stdlib-3.5, wx-1.2

os_mon-2.4.7 #

The os_mon-2.4.7 application can be applied independently of other applications on a full OTP 21 installation.

OTP-15387
Application(s):
os_mon
Related Id(s):
PR-1966

Due to /proc restrictions in newer Android releases enforced by SELinux, cpu_sup is fixed so that it gets some basic CPU stats using the sysinfo syscall rather than reading /proc/loadavg.

Full runtime dependencies of os_mon-2.4.7: erts-6.0, kernel-3.0, mnesia-4.12, otp_mibs-1.0.9, sasl-2.4, snmp-4.25.1, stdlib-2.0

public_key-1.6.4 #

The public_key-1.6.4 application can be applied independently of other applications on a full OTP 21 installation.

OTP-15419
Application(s):
crypto, public_key
Related Id(s):
OTP-15094

Added ed25519 and ed448 sign/verify.

Requires OpenSSL 1.1.1 or higher as cryptolib under the OTP application crypto.

Full runtime dependencies of public_key-1.6.4: asn1-3.0, crypto-3.8, erts-6.0, kernel-3.0, stdlib-3.5

reltool-0.7.8 #

The reltool-0.7.8 application can be applied independently of other applications on a full OTP 21 installation.

OTP-15454
Application(s):
reltool

Reltool would earlier erroneously split paths like "c:\foo" into ["c","\foo"] when reading the $ERL_LIBS variable on windows. This is now corrected.

Full runtime dependencies of reltool-0.7.8: erts-7.0, kernel-3.0, sasl-2.4, stdlib-3.4, tools-2.6.14, wx-1.2

sasl-3.3 #

Note! The sasl-3.3 application can *not* be applied independently of other applications on an arbitrary OTP 21 installation. On a full OTP 21 installation, also the following runtime dependency has to be satisfied: -- erts-10.2 (first satisfied in OTP 21.2)

OTP-13468
Application(s):
erts, sasl

*** HIGHLIGHT ***

New counters and atomics modules supplies access to highly efficient operations on mutable fixed word sized variables.

Full runtime dependencies of sasl-3.3: erts-10.2, kernel-5.3, stdlib-3.4, tools-2.6.14

ssh-4.7.2 #

The ssh-4.7.2 application can be applied independently of other applications on a full OTP 21 installation.

OTP-15413
Application(s):
ssh

Incompatibility with newer OpenSSH fixed. Previously versions 7.8 and later could cause Erlang SSH to exit.

OTP-15416
Application(s):
ssh

The 'exec' option for ssh daemons had wrong format in the documentation.

OTP-15094
Application(s):
ssh
Related Id(s):
OTP-15419

*** HIGHLIGHT ***

Added public key methods ssh-ed25519 and ssh-ed448.

Requires OpenSSL 1.1.1 or higher as cryptolib under the OTP application crypto.

OTP-15312
Application(s):
ssh

The SSH property tests are now adapted to the PropEr testing tool.

OTP-15314
Application(s):
ssh

The term "user" was not documented in the SSH app. A new chapter with terminology is added to the User's Manual where the term "user" is defined.

A reference manual page about the module ssh_file is also added. This is the default callback module for user's keys, host keys etc.

OTP-15424
Application(s):
ssh

Host and user key checking is made more robust.

Full runtime dependencies of ssh-4.7.2: crypto-4.2, erts-6.0, kernel-3.0, public_key-1.5.2, stdlib-3.3

ssl-9.1 #

The ssl-9.1 application can be applied independently of other applications on a full OTP 21 installation.

OTP-15368
Application(s):
ssl

PEM cache was not evicting expired entries due to due to timezone confusion.

OTP-15384
Application(s):
ssl
Related Id(s):
ERL-756

Make sure an error is returned if a "transport_accept socket" is used in some other call than ssl:handshake* or ssl:controlling_process

OTP-15402
Application(s):
ssl

Fix timestamp handling in the PEM-cache could cause entries to not be invalidated at the correct time.

OTP-15412
Application(s):
ssl
Related Id(s):
ERL-731

Extend check for undelivered data at closing, could under some circumstances fail to deliver all data that was actually received.

OTP-15415
Application(s):
ssl
Related Id(s):
ERL-763

Correct signature check for TLS-1.2 that allows different algorithms for signature of peer cert and peer cert key. Not all allowed combinations where accepted.

OTP-15418
Application(s):
ssl
Related Id(s):
ERL-770

Correct gen_statem return value, could cause renegotiation to fail.

OTP-15420
Application(s):
ssl
Related Id(s):
ERIERL-268

Add engine support for RSA key exchange

OTP-15449
Application(s):
ssl

*** HIGHLIGHT ***

*** POTENTIAL INCOMPATIBILITY ***

ssl now uses active n internally to boost performance. Old active once behavior can be restored by setting application variable see manual page for ssl application (man 6).

Full runtime dependencies of ssl-9.1: crypto-4.2, erts-10.0, inets-5.10.7, kernel-6.0, public_key-1.5, stdlib-3.5

stdlib-3.7 #

The stdlib-3.7 application can be applied independently of other applications on a full OTP 21 installation.

OTP-15343
Application(s):
erts, stdlib
Related Id(s):
PR-1962

Document bit_size in match specifications and allow it in ets:fun2ms.

OTP-15378
Application(s):
stdlib
Related Id(s):
ERL-696

The beam() type in beam_lib is defined as module() | file:filename() | binary(). The module() is misleading. Giving the module name as an atom will only work if the BEAM file is in a current directory.

To avoid confusion, module() has been removed from the type. That means that there will be a Dialyzer warning for code that call beam_lib with an atom as filename, but the calls will still work.

OTP-15428
Application(s):
stdlib
Related Id(s):
ERL-777

unicode_util crashed on certain emoji grapheme clusters in binary strings.

OTP-15437
Application(s):
compiler, stdlib
Related Id(s):
ERL-762

When an external fun was used, warnings for unused variables could be suppressed.

OTP-15474
Application(s):
erts, stdlib
Related Id(s):
ERIERL-229

Fix reduction count in lists:member/2

OTP-15245
Application(s):
compiler, stdlib
Related Id(s):
ERL-706

When specified, the +{source,Name} option will now override the actual file name in stack traces, instead of only affecting the return value of Mod:module_info().

The +deterministic flag will also affect stack traces now, omitting all path information except the file name, fixing a long-standing issue where deterministic builds required deterministic paths.

OTP-15371
Application(s):
erts, stdlib

List subtraction (The -- operator) will now yield properly on large inputs.

OTP-15464
Application(s):
stdlib

calendar:system_time_to_rfc3339/1,2 no longer remove trailing zeros from fractions.

Full runtime dependencies of stdlib-3.7: compiler-5.0, crypto-3.3, erts-10.0, kernel-6.0, sasl-3.0

tools-3.0.2 #

The tools-3.0.2 application can be applied independently of other applications on a full OTP 21 installation.

OTP-15476
Application(s):
tools

Remove emacs warnings and added more tests.

Full runtime dependencies of tools-3.0.2: compiler-5.0, erts-9.1, kernel-5.4, runtime_tools-1.8.14, stdlib-3.4

wx-1.8.6 #

The wx-1.8.6 application can be applied independently of other applications on a full OTP 21 installation.

OTP-15426
Application(s):
wx
Related Id(s):
ERL-755

Fixed delayed delete bug which caused wx applications to crash on Mojave.

Full runtime dependencies of wx-1.8.6: erts-6.0, kernel-3.0, stdlib-2.0