summaryrefslogtreecommitdiff
path: root/erts/doc
diff options
context:
space:
mode:
Diffstat (limited to 'erts/doc')
-rw-r--r--erts/doc/src/absform.xml15
-rw-r--r--erts/doc/src/alt_dist.xml34
-rw-r--r--erts/doc/src/erl_cmd.xml153
-rw-r--r--erts/doc/src/erl_dist_protocol.xml175
-rw-r--r--erts/doc/src/erl_ext_dist.xml51
-rw-r--r--erts/doc/src/erl_nif.xml48
-rw-r--r--erts/doc/src/erlang.xml356
-rw-r--r--erts/doc/src/erlc_cmd.xml45
-rw-r--r--erts/doc/src/erts_alloc.xml31
-rw-r--r--erts/doc/src/inet_cfg.xml4
-rw-r--r--erts/doc/src/init.xml4
-rw-r--r--erts/doc/src/match_spec.xml32
-rw-r--r--erts/doc/src/notes.xml2196
-rw-r--r--erts/doc/src/persistent_term.xml10
14 files changed, 2857 insertions, 297 deletions
diff --git a/erts/doc/src/absform.xml b/erts/doc/src/absform.xml
index c70ea23aaa..afdb2e7b70 100644
--- a/erts/doc/src/absform.xml
+++ b/erts/doc/src/absform.xml
@@ -430,6 +430,21 @@
<c>{match,ANNO,Rep(P),Rep(E_0)}</c>.</p>
</item>
<item>
+ <p>If E is a conditional match operator expression <c>P ?= E_0</c>,
+ where <c>P</c> is a pattern, then Rep(E) =
+ <c>{maybe_match,ANNO,Rep(P),Rep(E_0)}</c>.</p>
+ </item>
+ <item>
+ <p>If E is a maybe expression <c>maybe B end</c>,
+ where <c>B</c> is a body then Rep(E) =
+ <c>{'maybe',ANNO,Rep(B)}</c>.</p>
+ </item>
+ <item>
+ <p>If E is a maybe expression <c>maybe B else Ec_1 ; ... ; Ec_k end</c>,
+ where <c>B</c> is a body and each <c>Ec_i</c> is an else clause then Rep(E) =
+ <c>{'maybe',ANNO,Rep(B),{'else',ANNO,[Rep(Ec_1), ..., Rep(Tc_k)]}}</c>.</p>
+ </item>
+ <item>
<p>If E is nil, <c>[]</c>, then Rep(E) = <c>{nil,ANNO}</c>.</p>
</item>
<item>
diff --git a/erts/doc/src/alt_dist.xml b/erts/doc/src/alt_dist.xml
index d8d8765b91..f6b9327188 100644
--- a/erts/doc/src/alt_dist.xml
+++ b/erts/doc/src/alt_dist.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2020</year>
+ <year>2000</year><year>2022</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -314,8 +314,18 @@
<c>accept_connection/5</c> should spawn a process that will
perform the Erlang distribution handshake for the connection.
If the handshake successfully completes it should continue to
- function as a connection supervisor. This process
- should preferably execute on <c>max</c> priority.
+ function as a connection supervisor. This process should
+ preferably execute on <c>max</c> priority and should be linked
+ to the caller. The <c>dist_util:net_ticker_spawn_options()</c>
+ function can be called to get spawn options suitable for this process
+ which can be passed directly to
+ <seemfa marker="erts:erlang#spawn_opt/4"><c>erlang:spawn_opt/4</c></seemfa>.
+ <c>dist_util:net_ticker_spawn_options()</c> will by default return
+ <c>[link, {priority, max}]</c>, but allows the user to configure more
+ options using the
+ <seeapp marker="kernel:kernel_app#net_ticker_spawn_options"><c>net_ticker_spawn_options</c></seeapp>
+ kernel parameter. The process identifier of this process should be
+ returned.
</p>
<p>The arguments:</p>
<taglist>
@@ -380,8 +390,18 @@
<c>Node</c>. When connection has been established it should
perform the Erlang distribution handshake for the connection.
If the handshake successfully completes it should continue to
- function as a connection supervisor. This process
- should preferably execute on <c>max</c> priority.
+ function as a connection supervisor. This process should
+ preferably execute on <c>max</c> priority and should be linked
+ to the caller. The <c>dist_util:net_ticker_spawn_options()</c>
+ function can be called to get spawn options suitable for this process
+ which can be passed directly to
+ <seemfa marker="erts:erlang#spawn_opt/4"><c>erlang:spawn_opt/4</c></seemfa>.
+ <c>dist_util:net_ticker_spawn_options()</c> will by default return
+ <c>[link, {priority, max}]</c>, but allows the user to configure more
+ options using the
+ <seeapp marker="kernel:kernel_app#net_ticker_spawn_options"><c>net_ticker_spawn_options</c></seeapp>
+ kernel parameter. The process identifier of this process should be
+ returned.
</p>
<p>The arguments:</p>
<taglist>
@@ -1025,7 +1045,7 @@
header of four bytes containing the length of the package in a
big-endian 32-bit integer. As Unix domain sockets only can be used
between processes on the same machine, we do not need to
- code the integer in some special endianess, but we will do it anyway
+ code the integer in some special endianness, but we will do it anyway
because in most situation you need to do it. Unix domain
sockets are reliable and order maintaining, so we do not need to
implement resends and such in the driver.</p>
@@ -1410,7 +1430,7 @@
<section>
<title>Selected Parts of the Distribution Driver Implementation</title>
- <p>The implemenation of the distribution driver is not completely
+ <p>The implementation of the distribution driver is not completely
covered here, details about buffering and other things
unrelated to driver writing are not explained. Likewise are
some peculiarities of the UDS protocol not explained in
diff --git a/erts/doc/src/erl_cmd.xml b/erts/doc/src/erl_cmd.xml
index 5803647d29..ebfed75bf4 100644
--- a/erts/doc/src/erl_cmd.xml
+++ b/erts/doc/src/erl_cmd.xml
@@ -4,7 +4,7 @@
<comref>
<header>
<copyright>
- <year>1996</year><year>2021</year>
+ <year>1996</year><year>2023</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -283,10 +283,11 @@ $ <input>erl \
</item>
<tag><marker id="connect_all"/><c><![CDATA[-connect_all false]]></c></tag>
<item>
- <p>If this flag is present, <c><![CDATA[global]]></c> does not maintain
- a fully connected network of distributed Erlang nodes, and then
- global name registration cannot be used; see
- <seeerl marker="kernel:global"><c>global(3)</c></seeerl>.</p>
+ <p>
+ This flag is deprecated and has been replaced by the <c>kernel</c>
+ application parameter
+ <seeapp marker="kernel:kernel_app#connect_all"><c>connect_all</c></seeapp>.
+ </p>
</item>
<tag><c><![CDATA[-cookie Cookie]]></c></tag>
<item>
@@ -300,6 +301,25 @@ $ <input>erl \
console. Useful for running daemons and backgrounds processes. Implies
<c><![CDATA[-noinput]]></c>.</p>
</item>
+ <tag>
+ <marker id="disable-feature"></marker>
+ <c><![CDATA[-disable-feature feature]]></c>
+ </tag>
+ <item>
+ <p>Disables the
+ <seeguide
+ marker="system/reference_manual:features#features">feature</seeguide> <c><![CDATA[feature]]></c>
+ in the runtime system. The special feature <c>all</c> can be
+ used to disable all non permanent features.
+ </p>
+ </item>
+ <tag><marker id="dist_listen"/><c>-dist_listen true|false</c></tag>
+ <item><p>
+ Specifies whether this node should be listening for incoming
+ distribution connections or not. By default a node will listen for
+ incoming connections. Setting this option to <c>false</c>
+ implies <seecom marker="#hidden"><c>-hidden</c></seecom>.
+ </p></item>
<tag><c><![CDATA[-emu_args]]></c></tag>
<item>
<p>Useful for debugging. Prints the arguments sent to the emulator.</p>
@@ -318,7 +338,10 @@ $ <input>erl \
build a specific flavor by doing <c>make FLAVOR=$FLAVOR</c> in the
Erlang/OTP source repository.)</p>
</item>
- <tag><c><![CDATA[-emu_type Type]]></c></tag>
+ <tag>
+ <marker id="emu_type"></marker>
+ <c><![CDATA[-emu_type Type]]></c>
+ </tag>
<item>
<p>Start an emulator of a different type. For example, to start
the lock-counter emulator, use <c>-emu_type lcnt</c>.
@@ -329,6 +352,18 @@ $ <input>erl \
Use the <c>configure</c> option <c>--enable-lock-counter</c> to
build the lock-counter emulator.)</p>
</item>
+ <tag>
+ <marker id="enable-feature"></marker>
+ <c><![CDATA[-enable-feature feature]]></c>
+ </tag>
+ <item>
+ <p>Enables the
+ <seeguide
+ marker="system/reference_manual:features#features">feature</seeguide> <c><![CDATA[feature]]></c>
+ in the runtime system. The special feature <c>all</c> can be
+ used to enable all features.
+ </p>
+ </item>
<tag><c><![CDATA[-env Variable Value]]></c></tag>
<item>
<p>Sets the host OS environment variable <c><![CDATA[Variable]]></c> to
@@ -400,7 +435,7 @@ $ <input>erl \
the name supplied together with flag <c><![CDATA[-sname]]></c> or
<c><![CDATA[-name]]></c>.</p>
</item>
- <tag><c><![CDATA[-init_debug]]></c></tag>
+ <tag><marker id="init_debug"/><c><![CDATA[-init_debug]]></c></tag>
<item>
<p>Makes <c><![CDATA[init]]></c> write some debug information while
interpreting the boot script.</p>
@@ -461,10 +496,12 @@ $ <input>erl \
<p>Makes the Erlang runtime system into a distributed node.
This flag invokes all network servers necessary for a node to
become distributed; see <seeerl marker="kernel:net_kernel">
- <c>net_kernel(3)</c></seeerl>. It is also ensured that
+ <c>net_kernel(3)</c></seeerl>. It also ensures that
<c><![CDATA[epmd]]></c> runs on the current host before Erlang is
- started; see <seecom marker="epmd"><c>epmd(1)</c></seecom> and the
- <seecom marker="#start_epmd"><c>-start_epmd</c></seecom> option.</p>
+ started (see <seecom marker="epmd"><c>epmd(1)</c></seecom> and the
+ <seecom marker="#start_epmd"><c>-start_epmd</c></seecom> option) and
+ that a magic cookie has been set
+ (see <seecom marker="#setcookie">-setcookie</seecom>).</p>
<p>The node name will be <c><![CDATA[Name@Host]]></c>, where
<c><![CDATA[Host]]></c> is the fully qualified host name of the
current host. For short names, use flag <c><![CDATA[-sname]]></c>
@@ -580,6 +617,9 @@ $ <input>erl \
<note><p>Before OTP-23 the user <em>needed</em> to supply a valid <c>-sname</c> or
<c>-name</c> for <c>-remsh</c> to work. This is still the case if the target
node is not running OTP-23 or later.</p></note>
+ <note><p>The connecting node needs to have a proper shell with terminal emulation.
+ This means that UNIX users must use an Erlang compiled with terminal capabilities and
+ Windows users must use <seecom marker="werl"><c>werl(1)</c></seecom>.</p></note>
</item>
<tag><c><![CDATA[-rsh Program]]></c></tag>
<item>
@@ -608,11 +648,14 @@ $ <input>erl \
passed as atoms. See <seeerl marker="init">
<c>init(3)</c></seeerl>.</p>
</item>
- <tag><c><![CDATA[-setcookie Cookie]]></c></tag>
+ <tag><marker id="setcookie"/><c><![CDATA[-setcookie Cookie]]></c></tag>
<item>
<p>Sets the magic cookie of the node to <c><![CDATA[Cookie]]></c>; see
- <seemfa marker="erlang#set_cookie/2">
- <c>erlang:set_cookie/2</c></seemfa>.</p>
+ <seemfa marker="erlang#set_cookie/1"><c>erlang:set_cookie/1</c></seemfa>.
+ See see section
+ <seeguide marker="system/reference_manual:distributed">Distributed Erlang</seeguide>
+ in the Erlang Reference Manual for more details.
+ </p>
</item>
<tag><c><![CDATA[-setcookie Node Cookie]]></c></tag>
<item>
@@ -893,7 +936,7 @@ $ <input>erl \
<tag><marker id="+hmax"/><c><![CDATA[+hmax Size]]></c></tag>
<item>
<p>Sets the default maximum heap size of processes to the size
- <c><![CDATA[Size]]></c>. Defaults to <c>0</c>, which means that no
+ <c><![CDATA[Size]]></c> words. Defaults to <c>0</c>, which means that no
maximum heap size is used. For more information, see
<seeerl marker="erlang#process_flag_max_heap_size">
<c>process_flag(max_heap_size, MaxHeapSize)</c></seeerl>.</p>
@@ -961,10 +1004,45 @@ $ <input>erl \
<c>+IOt</c> are used, <c>+IOPt</c> is ignored.
</p>
</item>
- <tag><marker id="+JPperf"/><c>+JPperf true|false</c></tag>
+ <tag><marker id="+IOs"/><c>+IOs true|false</c></tag>
<item>
- <p>Enables or disables support for the `perf` profiler when running
- with the JIT on Linux. Defaults to false.</p>
+ <p>Enable or disable scheduler thread poll optimization. Default is
+ <c>true</c>.
+ </p>
+ <p>If enabled, file descriptors that are frequently read may be moved to
+ a special pollset used by scheduler threads. The objective is to
+ reduce the number of system calls and thereby CPU load, but it can
+ in some cases increase scheduling latency for individual file
+ descriptor input events.
+ </p>
+ </item>
+ <tag><marker id="+JPperf"/><c>+JPperf true|false|dump|map|fp|no_fp</c></tag>
+ <item>
+ <p>Enables or disables support for the <c>perf</c> profiler when
+ running with the JIT on Linux. Defaults to false.</p>
+ <p>This option can be combined multiple times to enable several
+ options:</p>
+ <taglist>
+ <tag><c>dump</c></tag>
+ <item>Gives <c>perf</c> detailed line information, so that the
+ <c>perf annotate</c> feature works.</item>
+ <tag><c>map</c></tag>
+ <item>Gives <c>perf</c> a map over all module code, letting it
+ translate machine code addresses to Erlang source code
+ locations. This also enables frame pointers for Erlang code so that
+ <c>perf</c> can walk the call stacks of Erlang processes, which
+ costs one extra word per stack frame.</item>
+ <tag><c>fp</c></tag>
+ <item>Enables frame pointers independently of the <c>map</c>
+ option.</item>
+ <tag><c>no_fp</c></tag>
+ <item>Disables the frame pointers added by the <c>map</c>
+ option.</item>
+ <tag><c>true</c></tag>
+ <item>Enables <c>map</c> and <c>dump</c>.</item>
+ <tag><c>false</c></tag>
+ <item>Disables all other options.</item>
+ </taglist>
<p>For more details about how to run perf see the
<seeguide marker="erts:BeamAsm#linux-perf-support">perf support</seeguide>
section in the BeamAsm internal documentation.
@@ -981,6 +1059,23 @@ $ <input>erl \
<p>Memory allocator-specific flags. For more information, see
<seecref marker="erts_alloc"><c>erts_alloc(3)</c></seecref>.</p>
</item>
+ <tag><marker id="+pad"/><c>+pad true|false</c></tag>
+ <item>
+ <p>Since: OTP 25.3</p>
+ <p>
+ The boolean value used with the <c>+pad</c> parameter determines
+ the default value of the
+ <seeerl marker="erlang#process_flag_async_dist">
+ <c>async_dist</c></seeerl> process flag of newly spawned processes.
+ By default, if no <c>+pad</c> command line option is passed,
+ the <c>async_dist</c> flag will be set to <c>false</c>.
+ </p>
+ <p>
+ The value used in runtime can be inspected by calling
+ <seeerl marker="erlang#system_info_async_dist">
+ <c>erlang:system_info(async_dist)</c></seeerl>.
+ </p>
+ </item>
<tag><marker id="+pc"/><marker id="printable_character_range"/>
<c><![CDATA[+pc Range]]></c></tag>
<item>
@@ -1501,6 +1596,16 @@ $ <input>erl \
<seeerl marker="erlang#system_info_cpu_topology">
<c>erlang:system_info(cpu_topology)</c></seeerl>.</p>
</item>
+ <tag><marker id="+ssrct"/><c>+ssrct</c></tag>
+ <item>
+ <p>Skips reading CPU topology.</p>
+ <note>
+ <p>Reading CPU topology slows down startup when starting many
+ parallel instances of ERTS on systems with large amount of
+ cores, using this flag might speed up execution in such
+ scenarios.</p>
+ </note>
+ </item>
<tag><marker id="+sfwi"/><c>+sfwi Interval</c></tag>
<item>
<p>Sets scheduler-forced wakeup interval. All run queues are
@@ -1716,6 +1821,11 @@ $ <input>erl \
limit is per distribution channel. A higher limit
gives lower latency and higher throughput at the expense
of higher memory use.</p>
+ <p>
+ This limit only affects processes that have disabled
+ <seeerl marker="erlang#process_flag_async_dist"><i>fully
+ asynchronous distributed signaling</i></seeerl>.
+ </p>
</item>
<tag><marker id="+zdntgc"/><c>+zdntgc time</c></tag>
<item>
@@ -1782,7 +1892,7 @@ $ <input>erl \
</item>
<tag><c><![CDATA[ERL_CRASH_DUMP_SECONDS=-1]]></c></tag>
<item>A negative value causes the termination of the runtime system
- to wait indefinitely until the crash dump file has been completly
+ to wait indefinitely until the crash dump file has been completely
written. This is the default if option <c>-heart</c> is <em>not</em>
passed to <c>erl</c> and <c>ERL_CRASH_DUMP_SECONDS</c> is not set.
</item>
@@ -1871,14 +1981,17 @@ $ <input>erl \
<tag>The <c>.erlang</c> startup file</tag>
<item>
<p>When Erlang/OTP is started, the system searches for a file named
- <c>.erlang</c> in the user&apos;s home directory.</p>
+ <c>.erlang</c> in the <seeerl marker="erts:init#home">
+ user&apos;s home directory</seeerl> and then
+ <seeerl marker="stdlib:filename#user_config">
+ <c>filename:basedir(user_config, "erlang")</c></seeerl>.</p>
<p>If an <c>.erlang</c> file is found, it is assumed to contain valid
Erlang expressions. These expressions are evaluated as if they were
input to the shell.</p>
<p>A typical <c>.erlang</c> file contains a set of search paths, for
example:</p>
<code type="none"><![CDATA[
-io:format("executing user profile in HOME/.erlang\n",[]).
+io:format("executing user profile in $HOME/.erlang\n",[]).
code:add_path("/home/calvin/test/ebin").
code:add_path("/home/hobbes/bigappl-1.2/ebin").
io:format(".erlang rc finished\n",[]). ]]></code>
diff --git a/erts/doc/src/erl_dist_protocol.xml b/erts/doc/src/erl_dist_protocol.xml
index de0b125c3a..400d3d896d 100644
--- a/erts/doc/src/erl_dist_protocol.xml
+++ b/erts/doc/src/erl_dist_protocol.xml
@@ -5,7 +5,7 @@
<header>
<copyright>
<year>2007</year>
- <year>2021</year>
+ <year>2023</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
@@ -161,7 +161,8 @@
<tag><c>LowestVersion</c></tag>
<item>
<p>The lowest distribution version that this node can handle.
- Should be 5 to support connections to nodes older than OTP 23.</p>
+ The value in OTP 25 and later is 6 as support for connections to
+ nodes older than OTP 23 has been dropped.</p>
</item>
<tag><c>Nlen</c></tag>
<item>
@@ -549,12 +550,19 @@ io:format("old/unused name ~ts at port ~p, fd = ~p ~n",
<p>
This section describes the distribution handshake protocol used between
nodes to establishing a connection. The protocol was introduced in
- Erlang/OTP R6 and has remained unchanged until OTP 23. The changes made in
- OTP 23 were designed to be compatible with the older protocol
- version. That is an old node can still connect toward a new node and vice
- versa.
+ Erlang/OTP R6 and amended in OTP 23. From OTP 25 support for the older
+ protocol was dropped. Therefore an OTP 25 node can not connect to nodes
+ older than OTP 23. This documentation only decribes the part of the
+ protocol used by OTP 25.
</p>
-
+ <note>
+ <p>
+ A bug introduced in OTP 25.0 may cause OTP 25 nodes to reject connection
+ attempts from OTP 23 and 24 nodes that are not using <c>epmd</c> to gain
+ version information about the remote node.
+ This is fixed in OTP 25.3.
+ </p>
+ </note>
<section>
<title>General</title>
<p>The TCP/IP distribution uses a handshake that expects a
@@ -658,19 +666,20 @@ io:format("old/unused name ~ts at port ~p, fd = ~p ~n",
</table>
<p>
- The old <c>send_name</c> format is sent from nodes only supporting version 5
- or to nodes that might only support version 5. The <c>Version</c> is
- a 16-bit big endian integer and <em>must</em> always have the value 5, even
- if node <c>A</c> supports version 6. <c>Flags</c> are the
+ The old <c>send_name</c> format is only sent from OTP 23 and 24
+ nodes that are not using <c>epmd</c> and therefore do not know if
+ the remote node only supports protocol version 5. The <c>Version</c> is
+ a 16-bit big endian integer and <em>must</em> always have the value
+ 5 (even though node <c>A</c> supports version 6). <c>Flags</c> are the
<seeguide marker="#dflags">capability flags</seeguide>
of node <c>A</c> in 32-bit big endian. The flag bit
<seeguide marker="#DFLAG_HANDSHAKE_23"><c>DFLAG_HANDSHAKE_23</c></seeguide>
- should be set if node <c>A</c> supports version 6.
+ must be set (as node <c>A</c> must supports version 6).
<c>Name</c> is the full node name of <c>A</c>, as a string of bytes
(the packet length denotes how long it is).
</p>
<p>
- The new <c>send_name</c> is only sent from nodes supporting version 6 to
+ The new <c>send_name</c> is sent to
nodes known to support version 6. <c>Flags</c> are the
<seeguide marker="#dflags">capability flags</seeguide> of node
<c>A</c> in 64-bit big endian. The flag bit
@@ -682,6 +691,11 @@ io:format("old/unused name ~ts at port ~p, fd = ~p ~n",
16-bit big endian. Any extra data after the node <c>Name</c> must be
accepted and ignored.
</p>
+ <p>
+ The <c>Name</c> must be just the host name (without @) when
+ <seeguide marker="#DFLAG_NAME_ME"><c>DFLAG_NAME_ME</c></seeguide>
+ is set.
+ </p>
</item>
<tag>3) <c>recv_status</c>/<c>send_status</c></tag>
<item>
@@ -737,34 +751,39 @@ io:format("old/unused name ~ts at port ~p, fd = ~p ~n",
</item>
<tag><c>named:</c></tag>
<item><p>
- The handshake willl continue, but <c>A</c> requested a dynamic
+ The handshake will continue, but <c>A</c> requested a dynamic
node name by setting flag <seeguide marker="#DFLAG_NAME_ME">
<c>DFLAG_NAME_ME</c></seeguide>. The dynamic node name of
<c>A</c> is supplied at the end of the status message from
- <c>B</c>.</p>
- </item>
+ <c>B</c>. The host name of <c>A</c> which was sent as <c>Name</c>
+ in <c>send_name</c> will be used by node <c>B</c> to generate
+ the full dynamic node name.</p>
+ <table align="left">
+ <row>
+ <cell align="center">1</cell>
+ <cell align="center">Slen=6</cell>
+ <cell align="center">2</cell>
+ <cell align="center">Nlen</cell>
+ <cell align="center">4</cell>
+ </row>
+ <row>
+ <cell align="center"><c>'s'</c></cell>
+ <cell align="center"><c>Status='named:'</c></cell>
+ <cell align="center"><c>Nlen</c></cell>
+ <cell align="center"><c>Name</c></cell>
+ <cell align="center"><c>Creation</c></cell>
+ </row>
+ <tcaption>The format of the 'named:' status message</tcaption>
+ </table>
+ <p>
+ <c>Name</c> is the full dynamic node name of <c>A</c>, as a
+ string of bytes. <c>Nlen</c> is the byte length of the node name in
+ 16-bit big endian. <c>Creation</c> is the incarnation identifier
+ of node <c>A</c> generated by node <c>B</c>.
+ Any extra data after the node <c>Creation</c> must be accepted and ignored.
+ </p>
+ </item>
</taglist>
- <table align="left">
- <row>
- <cell align="center">1</cell>
- <cell align="center">Slen=6</cell>
- <cell align="center">2</cell>
- <cell align="center">Nlen</cell>
- </row>
- <row>
- <cell align="center"><c>'s'</c></cell>
- <cell align="center"><c>Status='named:'</c></cell>
- <cell align="center"><c>Nlen</c></cell>
- <cell align="center"><c>Name</c></cell>
- </row>
- <tcaption>The format of the 'named:' status message</tcaption>
- </table>
- <p>
- <c>Name</c> is the full dynamic node name of <c>A</c>, as a
- string of bytes. <c>Nlen</c> is the byte length of the node name in
- 16-bit big endian. Any extra data after the node <c>Name</c> must be
- accepted and ignored.
- </p>
</item>
<tag>3B) <c>send_status</c>/<c>recv_status</c></tag>
<item>
@@ -780,29 +799,11 @@ io:format("old/unused name ~ts at port ~p, fd = ~p ~n",
handshake continues with <c>B</c> sending <c>A</c> another message,
the challenge. The challenge contains the same type of information
as the "name" message initially sent from <c>A</c> to <c>B</c>, plus
- a 32-bit challenge. The challenge message can have two different
- formats:
+ a 32-bit challenge:
</p>
<table align="left">
<row>
<cell align="center">1</cell>
- <cell align="center">2</cell>
- <cell align="center">4</cell>
- <cell align="center">4</cell>
- <cell align="center">Nlen</cell>
- </row>
- <row>
- <cell align="center"><c>'n'</c></cell>
- <cell align="center"><c>Version=5</c></cell>
- <cell align="center"><c>Flags</c></cell>
- <cell align="center"><c>Challenge</c></cell>
- <cell align="center"><c>Name</c></cell>
- </row>
- <tcaption>The old challenge message format (version 5)</tcaption>
- </table>
- <table align="left">
- <row>
- <cell align="center">1</cell>
<cell align="center">8</cell>
<cell align="center">4</cell>
<cell align="center">4</cell>
@@ -819,32 +820,18 @@ io:format("old/unused name ~ts at port ~p, fd = ~p ~n",
</row>
<tcaption>The new challenge message format (version 6)</tcaption>
</table>
- <p>
- The old challenge message is sent from old <c>B</c> nodes
- (supporting only version 5) or if node <c>A</c> had not capability flag
- <seeguide marker="#DFLAG_HANDSHAKE_23"><c>DFLAG_HANDSHAKE_23</c></seeguide>
- set. The <c>Version</c> is a 16-bit big endian integer and
- <c>must</c> always have the value 5.
- </p>
- <p>
- The new challenge message is sent from new <c>B</c> nodes if node
- <c>A</c> had capability flag <seeguide marker="#DFLAG_HANDSHAKE_23">
- <c>DFLAG_HANDSHAKE_23</c></seeguide> set. Any extra data after the
- node <c>Name</c> must be accepted and ignored.
- </p>
<p>
<c>Challenge</c> is a 32-bit big-endian integer. The other fields
are node <c>B</c>'s flags, creation and full node name, similar to
- the <c>send_name</c> message.
+ the <c>send_name</c> message. Any extra data after the node
+ <c>Name</c> must be accepted and ignored.
</p>
- </item>
-
+ </item>
<tag>4B) <c>send_complement</c>/<c>recv_complement</c></tag>
<item>
<p>
The complement message, from <c>A</c> to <c>B</c>, is only sent if
- node <c>A</c> initially sent an old name message and received back a
- new challenge message from node <c>B</c>. It contains complementary
+ node <c>A</c> initially sent an old name message. It contains complementary
information missing in the initial old name message from node <c>A</c>.
</p>
<table align="left">
@@ -940,7 +927,7 @@ recv_status
&lt;---------------------------------------------- send_challenge
recv_challenge
-(if old send_name and new recv_challenge
+(if old send_name
send_complement - - - - - - - - - - - - - - - -&gt;
recv_complement)
@@ -996,9 +983,9 @@ DiB == gen_digest(ChA, ICA)?
</item>
<tag><c>-define(DFLAG_FUN_TAGS,16#10).</c></tag>
<item>
- <p>The node uses separate tag for funs (lambdas) in the distribution
- protocol.</p>
- <note><p>This flag will become mandatory in OTP 25.</p></note>
+ <p>The node uses separate tags for funs (lambdas) in the
+ distribution protocol. This flag is mandatory. If not
+ present, the connection is refused.</p>
</item>
<tag><c>-define(DFLAG_DIST_MONITOR_NAME,16#20).</c></tag>
<item>
@@ -1024,20 +1011,21 @@ DiB == gen_digest(ChA, ICA)?
<tag><c>-define(DFLAG_EXPORT_PTR_TAG,16#200).</c></tag>
<item>
<p>The node understands the <seeguide marker="erl_ext_dist#EXPORT_EXT">
- <c>EXPORT_EXT</c></seeguide> tag.</p>
- <note><p>This flag will become mandatory in OTP 25.</p></note>
+ <c>EXPORT_EXT</c></seeguide> tag.
+ This flag is mandatory. If not present, the connection is refused.
+ </p>
</item>
<tag><c>-define(DFLAG_BIT_BINARIES,16#400).</c></tag>
<item>
<p>The node understands the <seeguide marker="erl_ext_dist#BIT_BINARY_EXT">
- <c>BIT_BINARY_EXT</c></seeguide> tag.</p>
- <note><p>This flag will become mandatory in OTP 25.</p></note>
+ <c>BIT_BINARY_EXT</c></seeguide> tag.
+ This flag is mandatory. If not present, the connection is refused.</p>
</item>
<tag><c>-define(DFLAG_NEW_FLOATS,16#800).</c></tag>
<item>
<p>The node understands the <seeguide marker="erl_ext_dist#NEW_FLOAT_EXT">
- <c>NEW_FLOAT_EXT</c></seeguide> tag.</p>
- <note><p>This flag will become mandatory in OTP 25.</p></note>
+ <c>NEW_FLOAT_EXT</c></seeguide> tag. This flag is
+ mandatory. If not present, the connection is refused.</p>
</item>
<tag><c>-define(DFLAG_UNICODE_IO,16#1000).</c></tag>
<item>
@@ -1063,8 +1051,8 @@ DiB == gen_digest(ChA, ICA)?
<tag><c>-define(DFLAG_MAP_TAG, 16#20000).</c></tag>
<item>
<p>The node understands the map tag
- <seeguide marker="erl_ext_dist#MAP_EXT"><c>MAP_EXT</c></seeguide>.</p>
- <note><p>This flag will become mandatory in OTP 25.</p></note>
+ <seeguide marker="erl_ext_dist#MAP_EXT"><c>MAP_EXT</c></seeguide>. This flag is
+ mandatory. If not present, the connection is refused.</p>
</item>
<tag><marker id="DFLAG_BIG_CREATION"/><c>-define(DFLAG_BIG_CREATION, 16#40000).</c></tag>
<item>
@@ -1104,7 +1092,8 @@ DiB == gen_digest(ChA, ICA)?
<tag><marker id="DFLAG_HANDSHAKE_23"/><c>-define(DFLAG_HANDSHAKE_23, 16#1000000).</c></tag>
<item>
<p>The node supports the new connection setup handshake (version 6)
- introduced in OTP 23.</p>
+ introduced in OTP 23. This flag is mandatory (from OTP 25). If not
+ present, the connection is refused.</p>
</item>
<tag><marker id="DFLAG_UNLINK_ID"/><c>-define(DFLAG_UNLINK_ID, 16#2000000).</c></tag>
<item>
@@ -1114,6 +1103,12 @@ DiB == gen_digest(ChA, ICA)?
<seeguide marker="#old_link_protocol">old link protocol</seeguide>
will be used as a fallback.</p>
</item>
+ <tag><c>-define(DFLAG_MANDATORY_25_DIGEST, (1 bsl 36)).</c></tag>
+ <item>
+ <p>The node supports all capabilities that are mandatory in OTP 25.
+ Introduced in OTP 25.</p>
+ <note><p>This flag will become mandatory in OTP 27.</p></note>
+ </item>
<tag><marker id="DFLAG_SPAWN"/><c>-define(DFLAG_SPAWN, (1 bsl 32)).</c></tag>
<item>
<p>Set if the <seeguide marker="#SPAWN_REQUEST"><c>SPAWN_REQUEST</c></seeguide>,
@@ -1419,7 +1414,7 @@ DiB == gen_digest(ChA, ICA)?
</item>
<tag><c>PAYLOAD_EXIT_TT</c></tag>
<item>
- <p><c>{25, FromPid, ToPid}</c></p>
+ <p><c>{25, FromPid, ToPid, TraceToken}</c></p>
<p>Followed by <c>Reason</c>.</p>
<p>
This control message replaces the <c>EXIT_TT</c> control
@@ -1441,7 +1436,7 @@ DiB == gen_digest(ChA, ICA)?
</item>
<tag><c>PAYLOAD_EXIT2_TT</c></tag>
<item>
- <p><c>{27, FromPid, ToPid}</c></p>
+ <p><c>{27, FromPid, ToPid, TraceToken}</c></p>
<p>Followed by <c>Reason</c>.</p>
<p>
This control message replaces the <c>EXIT2_TT</c> control
@@ -1452,7 +1447,7 @@ DiB == gen_digest(ChA, ICA)?
</item>
<tag><c>PAYLOAD_MONITOR_P_EXIT</c></tag>
<item>
- <p><c>{28, FromPid, ToPid, Ref}</c></p>
+ <p><c>{28, FromProc, ToPid, Ref}</c></p>
<p>Followed by <c>Reason</c>.</p>
<p>
This control message replaces the <c>MONITOR_P_EXIT</c> control
diff --git a/erts/doc/src/erl_ext_dist.xml b/erts/doc/src/erl_ext_dist.xml
index 5e2dd99945..b4b245187d 100644
--- a/erts/doc/src/erl_ext_dist.xml
+++ b/erts/doc/src/erl_ext_dist.xml
@@ -755,10 +755,8 @@
<item><p>A 32-bit big endian unsigned integer. All identifiers
originating from the same node incarnation must have identical <c>Creation</c>
values. This makes it possible to separate identifiers from old
- (crashed) nodes from a new one. The value zero should be avoided for
- normal operations as it is used as a wild card for debug purpose
- (like a pid returned by <seemfa marker="erts:erlang#list_to_pid/1">
- erlang:list_to_pid/1</seemfa>).</p>
+ (crashed) nodes from a new one. The value zero is reserved and
+ must be avoided for normal operations.</p>
</item>
</taglist>
<p><c>NEW_PID_EXT</c> was introduced in OTP 19, but only to be decoded
@@ -1110,7 +1108,7 @@
<section>
<marker id="FUN_EXT"/>
- <title>FUN_EXT</title>
+ <title>FUN_EXT (removed)</title>
<table align="left">
<row>
<cell align="center">1</cell>
@@ -1131,46 +1129,7 @@
<cell align="center"><c>Free vars ...</c></cell>
</row>
<tcaption>FUN_EXT</tcaption></table>
- <taglist>
- <tag><c>Pid</c></tag>
- <item>
- <p>A process identifier as in
- <seeguide marker="#PID_EXT"><c>PID_EXT</c></seeguide>.
- Represents the process in which the fun was created.
- </p>
- </item>
- <tag><c>Module</c></tag>
- <item>
- <p>
- The module that the fun is implemented in,
- <seeguide marker="#utf8_atoms">encoded as an atom</seeguide>.
- </p>
- </item>
- <tag><c>Index</c></tag>
- <item>
- <p>An integer encoded using
- <seeguide marker="#SMALL_INTEGER_EXT">
- <c>SMALL_INTEGER_EXT</c></seeguide>
- or <seeguide marker="#INTEGER_EXT"><c>INTEGER_EXT</c></seeguide>.
- It is typically a small index into the module's fun table.
- </p>
- </item>
- <tag><c>Uniq</c></tag>
- <item>
- <p>An integer encoded using
- <seeguide marker="#SMALL_INTEGER_EXT">
- <c>SMALL_INTEGER_EXT</c></seeguide> or
- <seeguide marker="#INTEGER_EXT"><c>INTEGER_EXT</c></seeguide>.
- <c>Uniq</c> is the hash value of the parse for the fun.
- </p>
- </item>
- <tag><c>Free vars</c></tag>
- <item>
- <p><c>NumFree</c> number of terms, each one encoded according
- to its type.
- </p>
- </item>
- </taglist>
+ <p>Not emitted since OTP R8, and not decoded since OTP 23.</p>
</section>
<section>
@@ -1205,7 +1164,7 @@
</row>
<tcaption>NEW_FUN_EXT</tcaption></table>
<p>
- This is the new encoding of internal funs: <c>fun F/A</c> and
+ This is the encoding of internal funs: <c>fun F/A</c> and
<c>fun(Arg1,..) -> ... end</c>.
</p>
<taglist>
diff --git a/erts/doc/src/erl_nif.xml b/erts/doc/src/erl_nif.xml
index 7a3b766f4c..4208aa269a 100644
--- a/erts/doc/src/erl_nif.xml
+++ b/erts/doc/src/erl_nif.xml
@@ -4,7 +4,7 @@
<cref>
<header>
<copyright>
- <year>2001</year><year>2021</year>
+ <year>2001</year><year>2022</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -100,6 +100,8 @@ ERL_NIF_INIT(niftest,nif_funcs,NULL,NULL,NULL,NULL)</code>
-export([init/0, hello/0]).
+-nifs([hello/0]).
+
-on_load(init/0).
init() ->
@@ -127,7 +129,13 @@ $> erl
which loads the NIF library and replaces the <c>hello</c> function with its
native implementation in C. Once loaded, a NIF library is persistent. It
will not be unloaded until the module code version that it belongs to is
- purged.</p>
+ purged.
+ </p>
+ <p>
+ The <seeguide marker="system/reference_manual:modules#nifs_attribute">
+ <c>-nifs()</c></seeguide> attribute specifies which functions in the
+ module that are to be replaced by NIFs.
+ </p>
<p>
Each NIF must have an implementation in Erlang to be invoked if the
function is called before the NIF library is successfully loaded. A
@@ -140,21 +148,6 @@ $> erl
However, unused local stub functions will be optimized
away by the compiler, causing loading of the NIF library to fail.</p>
</note>
- <warning>
- <p>
- There is a known limitation for Erlang fallback functions of NIFs. Avoid
- functions involved in traversal of binaries by matching and
- recursion. If a NIF is loaded over such function, binary arguments to
- the NIF may get corrupted and cause VM crash or other misbehavior.
- </p>
- <p>Example of such bad fallback function:</p>
- <code type="none">
-skip_until(Byte, &lt;&lt;Byte, Rest/binary&gt;&gt;) ->
- Rest;
-skip_until(Byte, &lt;&lt;_, Rest/binary&gt;&gt;) ->
- skip_until(Byte, Rest).
-</code>
- </warning>
</section>
<section>
@@ -599,9 +592,15 @@ int writeiovec(ErlNifEnv *env, ERL_NIF_TERM term, ERL_NIF_TERM *tail,
<p>The fourth argument <c>NULL</c> is ignored. It
was earlier used for the deprecated <c>reload</c> callback
which is no longer supported since OTP 20.</p>
- <p>If compiling a NIF for static inclusion through
- <c>--enable-static-nifs</c>, you must define <c>STATIC_ERLANG_NIF</c>
- before the <c>ERL_NIF_INIT</c> declaration.</p>
+ <p>If compiling a NIF lib for static inclusion through
+ <c>--enable-static-nifs</c>, then the macro
+ <c>STATIC_ERLANG_NIF_LIBNAME</c> must be defined as the name of the
+ archive file (excluding file extension .a) without string
+ quotations. It must only contain characters allowed in a C
+ indentifier. The macro must be defined before <c>erl_nif.h</c> is
+ included. If the older macro <c>STATIC_ERLANG_NIF</c> is instead
+ used, then the name of the archive file must match the name of the
+ module.</p>
</item>
<tag><marker id="load"/><c>int (*load)(ErlNifEnv* caller_env, void** priv_data,
ERL_NIF_TERM load_info)</c></tag>
@@ -3242,7 +3241,7 @@ enif_map_iterator_destroy(env, &amp;iter);</code>
<c>ERL_NIF_SELECT_READ</c> and/or <c>ERL_NIF_SELECT_WRITE</c> to
indicate which type of event to cancel. Arguments <c>pid</c> and
<c>ref</c> are ignored when <c>ERL_NIF_SELECT_CANCEL</c> is specified.
- The return value will tell if the event was actualy cancelled or if a
+ The return value will tell if the event was actually cancelled or if a
notification may already have been sent.</p>
<p>Use <c>ERL_NIF_SELECT_STOP</c> as <c>mode</c> in order to safely
close an event object that has been passed to <c>enif_select</c>. The
@@ -3766,7 +3765,10 @@ if (retval &amp; ERL_NIF_SELECT_STOP_CALLED) {
<section>
<title>See Also</title>
- <p><seemfa marker="erlang#load_nif/2">
- <c>erlang:load_nif/2</c></seemfa></p>
+ <p>
+ <seemfa marker="erlang#load_nif/2"><c>erlang:load_nif/2</c></seemfa><br/>
+ <seeguide marker="system/tutorial:nif">NIFs (tutorial)</seeguide><br/>
+ <seeguide marker="system/tutorial:debugging">Debugging NIFs and Port Drivers</seeguide>
+ </p>
</section>
</cref>
diff --git a/erts/doc/src/erlang.xml b/erts/doc/src/erlang.xml
index a5e4a3b331..b6e34a9332 100644
--- a/erts/doc/src/erlang.xml
+++ b/erts/doc/src/erlang.xml
@@ -510,14 +510,14 @@
<datatype>
<name name="dist_handle" prefix="true"/>
<desc>
- <p>An opaque handle identifing a distribution channel.</p>
+ <p>An opaque handle identifying a distribution channel.</p>
</desc>
</datatype>
<datatype>
<name name="nif_resource" prefix="true"/>
<desc>
- <p>An opaque handle identifing a
+ <p>An opaque handle identifying a
<seecref marker="erl_nif#resource_objects">NIF resource object
</seecref>.</p>
</desc>
@@ -552,7 +552,6 @@
MQD)</c></seeerl> </p>
</desc>
</datatype>
-
<datatype>
<name name="stacktrace" prefix="true"/>
<name name="stacktrace_extrainfo" prefix="true"/>
@@ -561,7 +560,15 @@
section in the Erlang Reference Manual.
</p></desc>
</datatype>
-
+ <datatype>
+ <name name="send_destination" prefix="true"/>
+ <desc>
+ <p>The destination for a send operation, can be a remote or local process identifier,
+ a (local) port, a reference denoting a process alias, a locally registered name, or a tuple
+ <c>{<anno>RegName</anno>, <anno>Node</anno>}</c>
+ for a registered name at another node.</p>
+ </desc>
+ </datatype>
</datatypes>
<funcs>
@@ -1783,7 +1790,9 @@ end</code>
<p>Prints a text representation of <c><anno>Term</anno></c> on the
standard output.</p>
<warning>
- <p>This BIF is intended for debugging only.</p>
+ <p>This BIF is intended for debugging only. The printed representation
+ may contain internal details that do not match the high-level
+ representation of the term in Erlang.</p>
</warning>
</desc>
</func>
@@ -1818,7 +1827,7 @@ end</code>
<p>
This function is used when implementing an alternative
distribution carrier using processes as distribution
- controllers. <c><anno>DHandle</anno></c> is retrived
+ controllers. <c><anno>DHandle</anno></c> is retrieved
via the callback
<seeguide marker="erts:alt_dist#hs_data_f_handshake_complete"><c>f_handshake_complete</c></seeguide>.
More information can be found in the documentation of
@@ -1847,7 +1856,7 @@ end</code>
<p>
This function is used when implementing an alternative
distribution carrier using processes as distribution
- controllers. <c><anno>DHandle</anno></c> is retrived
+ controllers. <c><anno>DHandle</anno></c> is retrieved
via the callback
<seeguide marker="erts:alt_dist#hs_data_f_handshake_complete"><c>f_handshake_complete</c></seeguide>.
More information can be found in the documentation of
@@ -1883,7 +1892,7 @@ end</code>
<p>
This function is used when implementing an alternative
distribution carrier using processes as distribution
- controllers. <c><anno>DHandle</anno></c> is retrived
+ controllers. <c><anno>DHandle</anno></c> is retrieved
via the callback
<seeguide marker="erts:alt_dist#hs_data_f_handshake_complete"><c>f_handshake_complete</c></seeguide>.
More information can be found in the documentation of
@@ -1904,7 +1913,7 @@ end</code>
Once this function has been called, <c><anno>InputHandler</anno></c>
is the only process allowed to call
<seemfa marker="erlang#dist_ctrl_put_data/2"><c>erlang:dist_ctrl_put_data(DHandle, Data)</c></seemfa>
- with the <c><anno>DHandle</anno></c> identifing this distribution
+ with the <c><anno>DHandle</anno></c> identifying this distribution
channel.
</p>
<note><p>
@@ -1916,7 +1925,7 @@ end</code>
<p>
This function is used when implementing an alternative
distribution carrier using processes as distribution
- controllers. <c><anno>DHandle</anno></c> is retrived
+ controllers. <c><anno>DHandle</anno></c> is retrieved
via the callback
<seeguide marker="erts:alt_dist#hs_data_f_handshake_complete"><c>f_handshake_complete</c></seeguide>.
More information can be found in the documentation of
@@ -1949,7 +1958,7 @@ end</code>
<p>
This function is used when implementing an alternative
distribution carrier using processes as distribution
- controllers. <c><anno>DHandle</anno></c> is retrived
+ controllers. <c><anno>DHandle</anno></c> is retrieved
via the callback
<seeguide marker="erts:alt_dist#hs_data_f_handshake_complete"><c>f_handshake_complete</c></seeguide>.
More information can be found in the documentation of
@@ -1998,7 +2007,7 @@ end</code>
<p>
This function is used when implementing an alternative
distribution carrier using processes as distribution
- controllers. <c><anno>DHandle</anno></c> is retrived
+ controllers. <c><anno>DHandle</anno></c> is retrieved
via the callback
<seeguide marker="erts:alt_dist#hs_data_f_handshake_complete"><c>f_handshake_complete</c></seeguide>.
More information can be found in the documentation of
@@ -2364,7 +2373,14 @@ true</pre>
> <input>float_to_binary(7.12, [{decimals, 4}, compact]).</input>
&lt;&lt;"7.12">>
> <input>float_to_binary(7.12, [{scientific, 3}]).</input>
-&lt;&lt;"7.120e+00">></pre>
+&lt;&lt;"7.120e+00">>
+> <input>float_to_binary(7.12, [short]).</input>
+&lt;&lt;"7.12">>
+> <input>float_to_binary(0.1+0.2, [short]).</input>
+&lt;&lt;"0.30000000000000004">>
+> <input>float_to_binary(0.1+0.2)</input>
+&lt;&lt;"3.00000000000000044409e-01">>
+</pre>
</desc>
</func>
@@ -2399,6 +2415,16 @@ true</pre>
formatted using scientific notation with <c>Decimals</c>
digits of precision.</p>
</item>
+ <item><p>If option <c>short</c> is specified, the float is formatted
+ with the smallest number of digits that still guarantees that
+ <c>F =:= list_to_float(float_to_list(F, [short]))</c>. When the float
+ is inside the range (-2⁵³, 2⁵³), the notation
+ that yields the smallest number of characters is used (scientific
+ notation or normal decimal notation). Floats outside the range
+ (-2⁵³, 2⁵³) are always formatted using
+ scientific notation to avoid confusing results when doing arithmetic
+ operations.</p>
+ </item>
<item><p>If <c>Options</c> is <c>[]</c>, the function behaves as
<seemfa marker="#float_to_list/1">
<c>float_to_list/1</c></seemfa>.</p>
@@ -2412,6 +2438,10 @@ true</pre>
"7.12"
> <input>float_to_list(7.12, [{scientific, 3}]).</input>
"7.120e+00"
+> <input>float_to_list(7.12, [short]).</input>
+"7.12"
+> <input>float_to_list(0.1+0.2, [short]).</input>
+"0.30000000000000004"
> <input>float_to_list(0.1+0.2)</input>
"3.00000000000000044409e-01"
</pre>
@@ -2640,7 +2670,7 @@ account.</p>
{#Fun&lt;test.2.107738983>,#Fun&lt;test.3.107738983>}
</pre>
<p>Explanation: The string representations differ because the funs
-come from different fun experssions.</p>
+come from different fun expressions.</p>
<pre>
> <input>{fun() -> 1 end, fun() -> 1 end}.</input> > <input></input>
{#Fun&lt;erl_eval.45.97283095>,#Fun&lt;erl_eval.45.97283095>}
@@ -2796,7 +2826,9 @@ uncompiled code with the same arity are mapped to the same list by
<fsummary>Get the magic cookie of the local node.</fsummary>
<desc>
<p>Returns the magic cookie of the local node if the node is
- alive, otherwise the atom <c>nocookie</c>.</p>
+ alive, otherwise the atom <c>nocookie</c>. This value is set by
+ <seemfa marker="#set_cookie/1"><c>set_cookie/1</c></seemfa>.
+ </p>
</desc>
</func>
@@ -2806,7 +2838,8 @@ uncompiled code with the same arity are mapped to the same list by
<desc>
<p>Returns the magic cookie for node <c><anno>Node</anno></c>
if the local node is alive,
- otherwise the atom <c>nocookie</c>.</p>
+ otherwise the atom <c>nocookie</c>. This value is set by
+ <seemfa marker="#set_cookie/2"><c>set_cookie/2</c></seemfa>.</p>
</desc>
</func>
@@ -2875,7 +2908,7 @@ uncompiled code with the same arity are mapped to the same list by
applications with a supervision tree, because OTP
assumes the group leader of their processes is
their application master.</p>
- <p>Setting the group leader follows the signal ordering guarentees
+ <p>Setting the group leader follows the signal ordering guarantees
described in the
<seeguide marker="system/reference_manual:processes#signals">
Processes Chapter</seeguide> in the <i>Erlang Reference Manual</i>.</p>
@@ -3364,7 +3397,7 @@ is_process_alive(P2Pid),
<p>See the documentation about
<seeguide marker="system/reference_manual:processes#signals">signals</seeguide>
and <seemfa marker="#exit/2">erlang:exit/2</seemfa> for more
- information about signals and exit singnals.</p>
+ information about signals and exit signals.</p>
</desc>
</func>
@@ -3790,6 +3823,11 @@ is_process_alive(P2Pid),
previous current code for <c><anno>Module</anno></c> will remain
until the <c>on_load</c> call has finished.
</item>
+ <tag>not_allowed</tag>
+ <item>The code in <c><anno>Binary</anno></c> has been
+ compiled with features that are currently not enabled in the
+ runtime system.
+ </item>
</taglist>
<warning>
<p>This BIF is intended for the code server (see
@@ -3845,6 +3883,16 @@ is_process_alive(P2Pid),
allowed.
</item>
</taglist>
+ <p>
+ If the <seeguide marker="system/reference_manual:modules#nifs_attribute">
+ <c>-nifs()</c></seeguide> attribute is used (which is recommended),
+ all NIFs in the dynamic library much be declared as such for
+ <c>load_nif/2</c> to succeed. On the other hand, all functions declared
+ with the <c>-nifs()</c> attribute do not have to be implemented by the
+ dynamic library. This allows a target independent Erlang file to
+ contain fallback implementations for functions that may lack NIF
+ support depending on target OS/hardware platform.
+ </p>
</desc>
</func>
@@ -3950,7 +3998,7 @@ is_process_alive(P2Pid),
<func>
<name name="make_tuple" arity="3" since=""/>
- <fsummary>Create a new tuple with specifed arity and contents.</fsummary>
+ <fsummary>Create a new tuple with specified arity and contents.</fsummary>
<desc>
<p>Creates a tuple of size <c><anno>Arity</anno></c>, where each element
has value <c><anno>DefaultValue</anno></c>, and then fills in
@@ -4322,14 +4370,13 @@ RealSystem = system + MissedSystem</code>
<name name="module_loaded" arity="1" since=""/>
<fsummary>Check if a module is loaded.</fsummary>
<desc>
- <p>Returns <c>true</c> if the module <c><anno>Module</anno></c>
- is loaded, otherwise <c>false</c>. It does not attempt to load
- the module.</p>
- <warning>
- <p>This BIF is intended for the code server (see
- <seeerl marker="kernel:code"><c>code(3)</c></seeerl>)
- and is not to be used elsewhere.</p>
- </warning>
+ <p>
+ Returns <c>true</c> if the module <c><anno>Module</anno></c> is
+ loaded as
+ <seeguide marker="system/reference_manual:code_loading#code-replacement">
+ <i>current code</i></seeguide>; otherwise, <c>false</c>. It does
+ not attempt to load the module.
+ </p>
</desc>
</func>
@@ -4888,6 +4935,91 @@ receive_replies(ReqId, N, Acc) ->
</func>
<func>
+ <name name="nodes" arity="2" since="OTP 25.1"/>
+ <fsummary>All nodes of a certain type in the system.</fsummary>
+ <desc>
+ <p>
+ Returns a list of <c><anno>NodeInfo</anno></c> tuples. The first
+ element is the node name. Nodes to be included in the list are
+ determined by the first argument <c><anno>Arg</anno></c> in the same
+ way as for
+ <seemfa marker="#nodes/1"><c>nodes(<anno>Arg</anno>)</c></seemfa>.
+ The second element of <c><anno>NodeInfo</anno></c> tuples is a map
+ containing further information about the node identified by the
+ first element. The information present in this map is determined by
+ the <c><anno>InfoOpts</anno></c> map passed as the second argument.
+ Currently the following associations are allowed in the
+ <c><anno>InfoOpts</anno></c> map:</p>
+ <taglist>
+ <tag><c>connection_id => boolean()</c></tag>
+ <item><p>
+ If the value of the association equals <c>true</c>, the <c>Info</c>
+ map in the returned result will contain the key <c>connection_id</c>
+ associated with the value <c><anno>ConnectionId</anno></c>. If
+ <c><anno>ConnectionId</anno></c> equals <c>undefined</c>, the node
+ is not connected to the node which the caller is executing on, or
+ is the node which the caller is executing on. If
+ <c><anno>ConnectionId</anno></c> is an integer, the node is
+ currently connected to the node which the caller is executing on.
+ </p>
+ <p>
+ <marker id="connection_id"/>
+ The integer connection identifier value together with a node name
+ identifies a specific connection instance to the node with that
+ node name. The connection identifier value is node local. That is,
+ on the other node the connection identifier will <i>not</i> be the
+ same value. If a connection is taken down and then taken up again,
+ the connection identifier value will change for the connection to
+ that node. The amount of values for connection identifiers are
+ limited, so it is possible to see the same value for different
+ instances, but quite unlikely. It is undefined how the value
+ change between two consecutive connection instances.
+ </p></item>
+ <tag><c>node_type => boolean()</c></tag>
+ <item><p>
+ If the value of the association equals <c>true</c>, the <c>Info</c>
+ map in the returned result will contain the key <c>node_type</c>
+ associated with the value <c><anno>NodeTypeInfo</anno></c>.
+ Currently the following node types exist:</p>
+ <taglist>
+ <tag><c>visible</c></tag>
+ <item><p>
+ The node is connected to the node of the calling process
+ through an ordinary visible connection. That is, the node
+ name would appear in the result returned by
+ <seemfa marker="#nodes/0"><c>nodes/0</c></seemfa>.
+ </p></item>
+ <tag><c>hidden</c></tag>
+ <item><p>
+ The node is connected to the node of the calling process
+ through a hidden connection. That is, the node
+ name would <i>not</i> appear in the result returned by
+ <seemfa marker="#nodes/0"><c>nodes/0</c></seemfa>.
+ </p></item>
+ <tag><c>this</c></tag>
+ <item><p>
+ This is the node of the calling process.
+ </p></item>
+ <tag><c>known</c></tag>
+ <item><p>
+ The node is not connected but known to the node of the
+ calling process.
+ </p></item>
+ </taglist>
+ </item>
+ </taglist>
+ <p>Example:</p>
+ <code type="erl">
+(a@localhost)1> nodes([this, connected], #{connection_id=>true, node_type=>true}).
+[{c@localhost,#{connection_id => 13892108,node_type => hidden}},
+ {b@localhost,#{connection_id => 3067553,node_type => visible}},
+ {a@localhost,#{connection_id => undefined,node_type => this}}]
+(a@localhost)2>
+ </code>
+ </desc>
+ </func>
+
+ <func>
<name name="now" arity="0" since=""/>
<fsummary>Elapsed time since 00:00 GMT.</fsummary>
<type name="timestamp"/>
@@ -4924,7 +5056,7 @@ receive_replies(ReqId, N, Acc) ->
new Erlang port. A port can be seen as an external Erlang
process.</p>
<p>The name of the executable as well as the arguments
- specifed in <c>cd</c>, <c>env</c>, <c>args</c>, and <c>arg0</c> are
+ specified in <c>cd</c>, <c>env</c>, <c>args</c>, and <c>arg0</c> are
subject to Unicode filename translation if the system is running
in Unicode filename mode. To avoid
translation or to force, for example UTF-8, supply the executable
@@ -6022,6 +6154,68 @@ receive_replies(ReqId, N, Acc) ->
<func>
<name name="process_flag" arity="2" clause_i="1"
+ anchor="process_flag_async_dist" since="OTP 25.3"/>
+ <fsummary>
+ Enable or disable fully asynchronous distributed signaling
+ for the calling process.
+ </fsummary>
+ <desc>
+ <p>
+ Enable or disable <i>fully asynchronous distributed signaling</i>
+ for the calling process. When disabled, which is the default, the
+ process sending a distributed signal will block in the send
+ operation if the buffer for the distribution channel reach the
+ <seecom marker="erts:erl#+zdbbl">distribution buffer busy
+ limit</seecom>. The process will remain blocked until the buffer
+ shrinks enough. This might in some cases take a substantial amount
+ of time. When <c>async_dist</c> is enabled, send operations of
+ distributed signals will always buffer the signal on the outgoing
+ distribution channel and then immediately return. That is, these
+ send operations will <em>never</em> block the sending process.
+ </p>
+ <note><p>
+ Since no flow control is enforced by the runtime system when
+ <c>async_dist</c> process flag is enabled, you need to make sure
+ that flow control for such data is implemented, or that the amount
+ of such data is known to always be limited. Unlimited signaling with
+ <c>async_dist</c> enabled in the absence of flow control will
+ typically cause the sending runtime system to crash on an out of
+ memory condition.
+ </p></note>
+ <p>
+ Blocking due to disabled <c>async_dist</c> can be monitored by
+ <seemfa marker="#system_monitor/2"><c>erlang:system_montor()</c></seemfa>
+ using the
+ <seeerl marker="#busy_dist_port"><c>busy_dist_port</c></seeerl>
+ option. Only data buffered by processes which (at the time of sending
+ a signal) have disabled <c>async_dist</c> will be counted when
+ determining whether or not an operation should block the caller.
+ </p>
+ <p>
+ The <c>async_dist</c> flag can also be set on a new process when
+ spawning it using the
+ <seemfa marker="#spawn_opt/4"><c>spawn_opt()</c></seemfa> BIF with the
+ option <seeerl marker="#spawn_opt_async_dist"><c>{async_dist,
+ Enable}</c></seeerl>. The default <c>async_dist</c> flag to use on
+ newly spawned processes can be set by passing the command line
+ argument <seecom marker="erl#+pad"><c>+pad
+ &lt;boolean&gt;</c></seecom> when starting the runtime system. If the
+ <c>+pad &lt;boolean&gt;</c> command line argument is not passed, the
+ default value of the <c>async_dist</c> flag will be <c>false</c>.
+ </p>
+ <p>
+ You can inspect the state of the <c>async_dist</c> process flag of a
+ process by calling <seeerl marker="#process_info_async_dist">
+ <c>process_info(Pid, async_dist)</c></seeerl>.
+ </p>
+ <p>
+ Returns the old value of the <c>async_dist</c> flag.
+ </p>
+ </desc>
+ </func>
+
+ <func>
+ <name name="process_flag" arity="2" clause_i="2"
anchor="process_flag_trap_exit" since=""/>
<fsummary>Set process flag trap_exit for the calling process.</fsummary>
<desc>
@@ -6039,7 +6233,7 @@ receive_replies(ReqId, N, Acc) ->
</func>
<func>
- <name name="process_flag" arity="2" clause_i="2" since=""/>
+ <name name="process_flag" arity="2" clause_i="3" since=""/>
<fsummary>Set process flag error_handler for the calling process.
</fsummary>
<desc>
@@ -6053,7 +6247,7 @@ receive_replies(ReqId, N, Acc) ->
</func>
<func>
- <name name="process_flag" arity="2" clause_i="3" since="OTP 24.0"/>
+ <name name="process_flag" arity="2" clause_i="4" since="OTP 24.0"/>
<fsummary>Set process flag fullsweep_after for the calling process.
</fsummary>
<desc>
@@ -6064,7 +6258,7 @@ receive_replies(ReqId, N, Acc) ->
</func>
<func>
- <name name="process_flag" arity="2" clause_i="4"
+ <name name="process_flag" arity="2" clause_i="5"
anchor="process_flag_min_heap_size" since=""/>
<fsummary>Set process flag min_heap_size for the calling process.
</fsummary>
@@ -6075,7 +6269,7 @@ receive_replies(ReqId, N, Acc) ->
</func>
<func>
- <name name="process_flag" arity="2" clause_i="5" since="OTP R13B04"/>
+ <name name="process_flag" arity="2" clause_i="6" since="OTP R13B04"/>
<fsummary>Set process flag min_bin_vheap_size for the calling process.
</fsummary>
<desc>
@@ -6086,7 +6280,7 @@ receive_replies(ReqId, N, Acc) ->
</func>
<func>
- <name name="process_flag" arity="2" clause_i="6"
+ <name name="process_flag" arity="2" clause_i="7"
anchor="process_flag_max_heap_size" since="OTP 19.0"/>
<fsummary>Set process flag max_heap_size for the calling process.
</fsummary>
@@ -6096,6 +6290,11 @@ receive_replies(ReqId, N, Acc) ->
If <c><anno>MaxHeapSize</anno></c> is an integer, the system default
values for <c>kill</c> and <c>error_logger</c> are used.
</p>
+ <p>
+ For details on how the heap grows, see
+ <seeguide marker="erts:GarbageCollection#sizing-the-heap">Sizing
+ the heap</seeguide> in the ERTS internal documentation.
+ </p>
<taglist>
<tag><c>size</c></tag>
<item>
@@ -6160,7 +6359,7 @@ receive_replies(ReqId, N, Acc) ->
</func>
<func>
- <name name="process_flag" arity="2" clause_i="7"
+ <name name="process_flag" arity="2" clause_i="8"
anchor="process_flag_message_queue_data" since="OTP 19.0"/>
<fsummary>Set process flag message_queue_data for the calling process.
</fsummary>
@@ -6202,7 +6401,7 @@ receive_replies(ReqId, N, Acc) ->
</func>
<func>
- <name name="process_flag" arity="2" clause_i="8"
+ <name name="process_flag" arity="2" clause_i="9"
anchor="process_flag_priority" since=""/>
<fsummary>Set process flag priority for the calling process.</fsummary>
<type name="priority_level"/>
@@ -6275,7 +6474,7 @@ receive_replies(ReqId, N, Acc) ->
</func>
<func>
- <name name="process_flag" arity="2" clause_i="9" since=""/>
+ <name name="process_flag" arity="2" clause_i="10" since=""/>
<fsummary>Set process flag save_calls for the calling process.</fsummary>
<desc>
<p><c><anno>N</anno></c> must be an integer in the interval 0..10000.
@@ -6306,7 +6505,7 @@ receive_replies(ReqId, N, Acc) ->
</func>
<func>
- <name name="process_flag" arity="2" clause_i="10" since=""/>
+ <name name="process_flag" arity="2" clause_i="11" since=""/>
<fsummary>Set process flag sensitive for the calling process.</fsummary>
<desc>
<p>Sets or clears flag <c>sensitive</c> for the current process.
@@ -6434,7 +6633,7 @@ receive_replies(ReqId, N, Acc) ->
<c><anno>Item</anno></c>s were included
in <c><anno>ItemList</anno></c>. Valid <c><anno>Item</anno></c>s can
be included multiple times in <c><anno>ItemList</anno></c>.</p>
- <p>Getting process informations follows the signal ordering guarantees
+ <p>Getting process information follows the signal ordering guarantees
described in the
<seeguide marker="system/reference_manual:processes#signals">
Processes Chapter</seeguide> in the <i>Erlang Reference Manual</i>.</p>
@@ -6451,6 +6650,18 @@ receive_replies(ReqId, N, Acc) ->
<p>Valid <c><anno>InfoTuple</anno></c>s with corresponding
<c><anno>Item</anno></c>s:</p>
<taglist>
+ <tag>
+ <marker id="process_info_async_dist"/>
+ <c>{async_dist, Enabled}</c>
+ </tag>
+ <item>
+ <p>Since: OTP 25.3</p>
+ <p>
+ Current value of the
+ <seeerl marker="erlang#process_flag_async_dist">
+ <c>async_dist</c></seeerl> process flag.
+ </p>
+ </item>
<tag><c>{backtrace, <anno>Bin</anno>}</c></tag>
<item>
<p>Binary <c><anno>Bin</anno></c> contains the same information
@@ -6632,6 +6843,14 @@ receive_replies(ReqId, N, Acc) ->
<seeerl marker="#process_flag_message_queue_data">
<c>process_flag(message_queue_data, MQD)</c></seeerl>.</p>
</item>
+ <tag><c>{parent, <anno>Pid</anno>}</c></tag>
+ <item>
+ <p><c><anno>Pid</anno></c> is the identifier
+ of the parent process, the one that spawned current
+ process. When the process does not have a parent
+ <c>undefined</c> is returned. Only the initial process
+ (<c>init</c>) on a node lacks a parent, though.</p>
+ </item>
<tag><c>{priority, <anno>Level</anno>}</c></tag>
<item>
<p><c><anno>Level</anno></c> is the current priority level for
@@ -7082,7 +7301,6 @@ true</pre>
<func>
<name name="send" arity="2" since=""/>
<fsummary>Send a message.</fsummary>
- <type name="dst"/>
<desc>
<p>Sends a message and returns <c><anno>Msg</anno></c>. This
is the same as using the <seeguide marker="system/reference_manual:expressions#send">
@@ -7090,8 +7308,7 @@ true</pre>
<c><anno>Dest</anno> ! <anno>Msg</anno></c>.</p>
<p><c><anno>Dest</anno></c> can be a remote or local process identifier,
an alias, a (local) port, a locally registered name, or a tuple
- <c>{<anno>RegName</anno>, <anno>Node</anno>}</c>
- for a registered name at another node.</p>
+ <c>{RegName, Node}</c> for a registered name at another node.</p>
<p>The function fails with a <c>badarg</c> run-time error if
<c><anno>Dest</anno></c> is an atom name, but this name is not
registered. This is the only case when <c>send</c> fails for an
@@ -7102,7 +7319,6 @@ true</pre>
<func>
<name name="send" arity="3" since=""/>
<fsummary>Send a message conditionally.</fsummary>
- <type name="dst"/>
<desc>
<p>Either sends a message and returns <c>ok</c>, or does not send
the message but returns something else (see below).
@@ -7158,7 +7374,6 @@ true</pre>
<func>
<name name="send_nosuspend" arity="2" since=""/>
<fsummary>Try to send a message without ever blocking.</fsummary>
- <type name="dst"/>
<desc>
<p>The same as
<seemfa marker="#send/3"><c>erlang:send(<anno>Dest</anno>,
@@ -7208,7 +7423,6 @@ true</pre>
<func>
<name name="send_nosuspend" arity="3" since=""/>
<fsummary>Try to send a message without ever blocking.</fsummary>
- <type name="dst"/>
<desc>
<p>The same as
<seemfa marker="#send/3"><c>erlang:send(<anno>Dest</anno>,
@@ -7250,6 +7464,8 @@ true</pre>
<seeguide marker="system/reference_manual:distributed">
Distributed Erlang</seeguide>
in the Erlang Reference Manual in System Documentation).</p>
+ <p>You can get this value using
+ <seemfa marker="#get_cookie/0"><c>get_cookie/0</c></seemfa>.</p>
<p>Failure: <c>function_clause</c> if the local node is not
alive.</p>
</desc>
@@ -7267,6 +7483,8 @@ true</pre>
<seeguide marker="system/reference_manual:distributed">
Distributed Erlang</seeguide>
in the Erlang Reference Manual in System Documentation).</p>
+ <p>You can get this value using
+ <seemfa marker="#get_cookie/1"><c>get_cookie/1</c></seemfa>.</p>
<p>Failure: <c>function_clause</c> if the local node is not
alive.</p>
</desc>
@@ -7687,6 +7905,21 @@ true</pre>
<c>process_flag(message_queue_data,
<anno>MQD</anno>)</c></seeerl>.</p>
</item>
+ <tag>
+ <marker id="spawn_opt_async_dist"/>
+ <c>{async_dist, Enabled}</c>
+ </tag>
+ <item>
+ <p>Since: OTP 25.3</p>
+ <p>
+ Set the
+ <seeerl marker="erlang#process_flag_async_dist">
+ <c>async_dist</c></seeerl> process flag of the spawned process.
+ This option will override the default value set by the command
+ line argument
+ <seecom marker="erl#+pad"><c>+pad &lt;boolean&gt;</c></seecom>.
+ </p>
+ </item>
</taglist>
</desc>
</func>
@@ -8037,6 +8270,11 @@ true</pre>
</p>
</item>
</taglist>
+ <p>
+ If a spawn reply message is delivered, it is guaranteed to be
+ delivered before any other signals from the newly spawned
+ process are delivered to the process issuing the spawn request.
+ </p>
<p>This function will fail with a <c>badarg</c> exception if:
</p>
<list>
@@ -8593,7 +8831,7 @@ lists:map(
and <seeerl marker="#system_info_dirty_cpu_schedulers">dirty CPU</seeerl>
schedulers in the system have been busy. This value is normally a
better indicator of how much load an Erlang node is under instead of
- looking at the CPU utilization privided by tools such as <c>top</c> or
+ looking at the CPU utilization provided by tools such as <c>top</c> or
<c>sysstat</c>. This is because <c>scheduler_wall_time</c> also includes
time where the scheduler is waiting for some other reasource (such as an internal
mutex) to be available but does not use the CPU. In order to better
@@ -8898,7 +9136,7 @@ ok
</item>
</taglist>
<p>
- Appart from the reply message, the <c>{asynchronous,
+ Apart from the reply message, the <c>{asynchronous,
ReplyTag}</c> option behaves exactly the same as the
<c>asynchronous</c> option without reply tag.
</p>
@@ -9158,6 +9396,11 @@ ok
<seeerl marker="#process_flag_max_heap_size">
<c>process_flag/2</c></seeerl>.</p>
<p>Returns the old value of the flag.</p>
+ <p>
+ For details on how the heap grows, see
+ <seeguide marker="erts:GarbageCollection#sizing-the-heap">Sizing
+ the heap</seeguide> in the ERTS internal documentation.
+ </p>
</desc>
</func>
@@ -10282,7 +10525,7 @@ Metadata = #{ pid => pid(),
introduced in the future:</p>
<taglist>
<tag><c>{function, Function}</c></tag>
- <item><p><c>Function</c> is the name of the funcion used.</p>
+ <item><p><c>Function</c> is the name of the function used.</p>
</item>
<tag><c>{clock_id, ClockId}</c></tag>
<item><p>Exists only if <c>Function</c>
@@ -10707,6 +10950,8 @@ Metadata = #{ pid => pid(),
</func>
<func>
+ <name name="system_info" arity="1" clause_i="79"
+ anchor="system_info_async_dist" since="OTP 25.3"/> <!-- async_dist -->
<name name="system_info" arity="1" clause_i="14"
anchor="system_info_dist" since=""/> <!-- creation -->
<name name="system_info" arity="1" clause_i="16" since="OTP 18.0"/> <!-- delayed_node_table_gc -->
@@ -10719,6 +10964,17 @@ Metadata = #{ pid => pid(),
<p>Returns information about Erlang Distribution in the
current system as specified by <c><anno>Item</anno></c>:</p>
<taglist>
+ <tag><marker id="system_info_async_dist"/><c>async_dist</c></tag>
+ <item>
+ <p>Since: OTP 25.3</p>
+ <p>
+ Returns the value of the command line argument
+ <seecom marker="erl#+pad">+pad &lt;boolean&gt;</seecom>
+ which the runtime system use. This value determines the default
+ <seeerl marker="erlang#process_flag_async_dist">
+ <c>async_dist</c></seeerl> value for newly spawned processes.
+ </p>
+ </item>
<tag><marker id="system_info_creation"/>
<c>creation</c></tag>
<item>
@@ -10857,7 +11113,7 @@ Metadata = #{ pid => pid(),
<!-- <name name="system_info" arity="1" clause_i="76"/> update_cpu_info -->
<name name="system_info" arity="1" clause_i="77" since=""/> <!-- version -->
<name name="system_info" arity="1" clause_i="78" since=""/> <!-- wordsize -->
- <!-- <name name="system_info" arity="1" clause_i="79"/> overview -->
+ <!-- <name name="system_info" arity="1" clause_i="80"/> overview -->
<!-- When adding any entry, make sure to update the overview clause_i -->
<fsummary>Information about the system.</fsummary>
<desc>
@@ -11225,7 +11481,7 @@ Metadata = #{ pid => pid(),
<c><anno>MonitorPid</anno></c>. <c>SusPid</c> is the pid
that got suspended when sending to <c>Port</c>.</p>
</item>
- <tag><c>busy_dist_port</c></tag>
+ <tag><c>busy_dist_port</c><marker id="busy_dist_port"/></tag>
<item>
<p>If a process in the system gets suspended because it
sends to a process on a remote node whose inter-node
@@ -12460,7 +12716,7 @@ improper_end</pre>
<item>
<p>Returns a list of atoms indicating what kind of traces is
enabled for the process. The list is empty if no
- traces are enabled, and one or more of the followings
+ traces are enabled, and one or more of the following
atoms if traces are enabled: <c>send</c>,
<c>'receive'</c>, <c>set_on_spawn</c>, <c>call</c>,
<c>return_to</c>, <c>procs</c>, <c>ports</c>,
diff --git a/erts/doc/src/erlc_cmd.xml b/erts/doc/src/erlc_cmd.xml
index 98042d49b7..5274e9b322 100644
--- a/erts/doc/src/erlc_cmd.xml
+++ b/erts/doc/src/erlc_cmd.xml
@@ -4,7 +4,7 @@
<comref>
<header>
<copyright>
- <year>1997</year><year>2020</year>
+ <year>1997</year><year>2022</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -142,6 +142,47 @@
<p>Use the
<seecom marker="#compile_server">compile server</seecom>.</p>
</item>
+ <tag>
+ <marker id="enable-feature"/>
+ <c>-enable-feature &lt;Feature&gt;</c>
+ </tag>
+ <item>
+ <p>Enables the
+ <seeguide
+ marker="system/reference_manual:features#features">feature</seeguide> <c>feature</c>
+ during compilation. The special feature <c>all</c> can be
+ used to enable all features.
+ </p>
+ </item>
+ <tag>
+ <marker id="disable-feature"/>
+ <c>-disable-feature &lt;feature&gt;</c>
+ </tag>
+ <item>
+ <p>Disables the
+ <seeguide
+ marker="system/reference_manual:features#features">feature</seeguide> <c>feature</c>
+ during compilation. The special feature <c>all</c> can be
+ used to disable all non permanent features.
+ </p>
+ </item>
+ <tag><c>-list-features</c></tag>
+ <item>
+ <p><marker id="list-features"/> List short descriptions of the
+ current configurable <seeguide
+ marker="system/reference_manual:features#features">features</seeguide>.
+ Non configurable features, i.e., those with a status of
+ <c>rejected</c> or <c>permanent</c> will not be shown.
+ </p>
+ </item>
+ <tag><c>-describe-feature &lt;feature&gt;</c></tag>
+ <item>
+ <p><marker id="describe-feature"/>
+ Show long description and history of
+ <seeguide
+ marker="system/reference_manual:features#features">feature</seeguide> <c>feature</c>.
+ </p>
+ </item>
<tag><c>-M</c></tag>
<item>
<p>Produces a Makefile rule to track header dependencies. The
@@ -326,7 +367,7 @@ erlc +export_all file.erl</pre>
<p>Using the compile server does not always speed up the build, as
the compile server sometimes must be restarted to ensure correctness.
- Here are some examples of situtations that force a restart:</p>
+ Here are some examples of situations that force a restart:</p>
<list type="bulleted">
<item><c>erlc</c> wants to use a different version of Erlang
diff --git a/erts/doc/src/erts_alloc.xml b/erts/doc/src/erts_alloc.xml
index 1a1e583ab1..da293f9c45 100644
--- a/erts/doc/src/erts_alloc.xml
+++ b/erts/doc/src/erts_alloc.xml
@@ -4,7 +4,7 @@
<cref>
<header>
<copyright>
- <year>2002</year><year>2021</year>
+ <year>2002</year><year>2022</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -514,6 +514,29 @@
<p>See also <seecref marker="#M_acul"><c>acul</c></seecref>.</p>
</item>
+ <tag><marker id="M_acful"/><c><![CDATA[+M<S>acful <utilization>|de]]></c>
+ </tag>
+ <item>
+ <p>Abandon carrier free utilization limit. When the utilization of
+ a carrier falls belows this limit erts_alloc instructs the OS that
+ unused memory in the carrier can be re-used for allocation by other OS
+ procesesses. On Unix this is done by calling <c>madvise(..., ..., MADV_FREE)</c>
+ on the unused memory region, on Windows it is done by calling
+ <c>VirtualAlloc(..., ..., MEM_RESET, PAGE_READWRITE)</c>. Defaults to 0
+ which means that no memory will be marked as re-usable by the OS.</p>
+ <p>A valid
+ <c><![CDATA[<utilization>]]></c> is an integer in the range
+ <c>[0, 100]</c> representing utilization in percent. If this value is
+ larger than the <c>acul</c> limit it will be lowered to the current
+ <c>acul</c> limit. If <c>de</c> (default
+ enabled) is passed instead of a <c><![CDATA[<utilization>]]></c>,
+ a recommended non-zero utilization value is used. The value
+ chosen depends on the allocator type and can be changed between
+ ERTS versions.
+ </p>
+ <p>See also <seecref marker="#M_acul"><c>acul</c></seecref>.</p>
+ </item>
+
<tag><marker id="M_as"/>
<c><![CDATA[+M<S>as bf|aobf|aoff|aoffcbf|aoffcaobf|ageffcaoff|ageffcbf|ageffcaobf|gf|af]]></c></tag>
<item>
@@ -638,7 +661,7 @@
good fit strategy is selected for allocator
<c><![CDATA[<S>]]></c>. When the good fit strategy is used, free
blocks are placed in segregated free-lists. Each free-list
- contains blocks of sizes in a specific range. The maxiumum block
+ contains blocks of sizes in a specific range. The maximum block
search depth sets a limit on the maximum number of blocks to
inspect in a free-list during a search for suitable block
satisfying the request.</p>
@@ -781,10 +804,6 @@
<seecref marker="#M_atags"><c>+M&lt;S&gt;atags</c></seecref> for a
more complete description.</p>
</item>
- <tag><marker id="Mit"/><c>+Mit X</c></tag>
- <item>
- <p>Reserved for future use. Do <em>not</em> use this flag.</p>
- </item>
</taglist>
<note>
diff --git a/erts/doc/src/inet_cfg.xml b/erts/doc/src/inet_cfg.xml
index 635156378e..76788f50b7 100644
--- a/erts/doc/src/inet_cfg.xml
+++ b/erts/doc/src/inet_cfg.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2004</year><year>2020</year>
+ <year>2004</year><year>2022</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -79,7 +79,7 @@
<c><![CDATA['file']]></c> or <c><![CDATA['dns']]></c>, see below.</p>
<p>Native lookup (system calls) is always the default resolver method.
- This is true for all platforms, except VxWorks and OSE Delta where
+ This is true for all platforms, except OSE Delta where
<c><![CDATA['file']]></c> or <c><![CDATA['dns']]></c> is used (in that
priority order).</p>
diff --git a/erts/doc/src/init.xml b/erts/doc/src/init.xml
index 1b22cbe478..2d6b22a826 100644
--- a/erts/doc/src/init.xml
+++ b/erts/doc/src/init.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>1996</year><year>2020</year>
+ <year>1996</year><year>2021</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -108,7 +108,7 @@
3> <input>init:get_argument(progname).</input>
{ok,[["erl"]]}</pre>
</item>
- <tag><c>home</c></tag>
+ <tag><marker id="home"/><c>home</c></tag>
<item>
<p>The home directory (on Unix, the value of $HOME):</p>
<pre>
diff --git a/erts/doc/src/match_spec.xml b/erts/doc/src/match_spec.xml
index 65a886fe96..988f895dde 100644
--- a/erts/doc/src/match_spec.xml
+++ b/erts/doc/src/match_spec.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1999</year><year>2021</year>
+ <year>1999</year><year>2022</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -113,8 +113,9 @@
<c><![CDATA[length]]></c> | <c><![CDATA[map_get]]></c> |
<c><![CDATA[map_size]]></c> | <c><![CDATA[node]]></c> |
<c><![CDATA[round]]></c> | <c><![CDATA[size]]></c> |
- <c><![CDATA[bit_size]]></c> |
+ <c><![CDATA[bit_size]]></c> | <c><![CDATA[byte_size]]></c> |
<c><![CDATA[tl]]></c> | <c><![CDATA[trunc]]></c> |
+ <c><![CDATA[binary_part]]></c> |
<c><![CDATA['+']]></c> | <c><![CDATA['-']]></c> |
<c><![CDATA['*']]></c> | <c><![CDATA['div']]></c> |
<c><![CDATA['rem']]></c> | <c><![CDATA['band']]></c> |
@@ -139,6 +140,7 @@
<c><![CDATA[process_dump]]></c> | <c><![CDATA[enable_trace]]></c> |
<c><![CDATA[disable_trace]]></c> | <c><![CDATA[trace]]></c> |
<c><![CDATA[display]]></c> | <c><![CDATA[caller]]></c> |
+ <c><![CDATA[caller_line]]></c> |
<c><![CDATA[set_tcw]]></c> | <c><![CDATA[silent]]></c>
</item>
</list>
@@ -195,8 +197,9 @@
<c><![CDATA[length]]></c> | <c><![CDATA[map_get]]></c> |
<c><![CDATA[map_size]]></c> | <c><![CDATA[node]]></c> |
<c><![CDATA[round]]></c> | <c><![CDATA[size]]></c> |
- <c><![CDATA[bit_size]]></c> |
+ <c><![CDATA[bit_size]]></c> | <c><![CDATA[byte_size]]></c> |
<c><![CDATA[tl]]></c> | <c><![CDATA[trunc]]></c> |
+ <c><![CDATA[binary_part]]></c> |
<c><![CDATA['+']]></c> | <c><![CDATA['-']]></c> |
<c><![CDATA['*']]></c> | <c><![CDATA['div']]></c> |
<c><![CDATA['rem']]></c> | <c><![CDATA['band']]></c> |
@@ -273,7 +276,8 @@
</item>
<tag><c>abs</c>, <c>element</c>, <c>hd</c>, <c>length</c>,
<c>map_get</c>, <c>map_size</c>, <c>node</c>, <c>round</c>,
- <c>size</c>, <c>bit_size</c>, <c>tl</c>, <c>trunc</c>, <c>'+'</c>,
+ <c>size</c>, <c>bit_size</c>, <c>byte_size</c>, <c>tl</c>,
+ <c>trunc</c>, <c>binary_part</c>, <c>'+'</c>,
<c>'-'</c>, <c>'*'</c>, <c>'div'</c>, <c>'rem'</c>, <c>'band'</c>,
<c>'bor'</c>, <c>'bxor'</c>, <c>'bnot'</c>, <c>'bsl'</c>,
<c>'bsr'</c>, <c>'>'</c>, <c>'>='</c>, <c>'&lt;'</c>, <c>'=&lt;'</c>,
@@ -435,6 +439,24 @@
<c><![CDATA[undefined]]></c>. The calling
Erlang function is not available during such calls.</p>
</item>
+ <tag><c>caller_line</c></tag>
+ <item>
+ <p>Similar to <c>caller</c> but returns additional information about
+ the source code location of the function call-site within the
+ caller function. Returns the calling function as a tuple
+ <c>{Module, Function, Arity, {File, Line}}</c>. <c>File</c> is the
+ <seeguide marker="system/reference_manual:data_types#string">string</seeguide>
+ file name while <c>Line</c> is source line number. If the <c>File</c>
+ and <c>Line</c> cannot be determined, <c>{Module, Function, Arity, undefined}</c>
+ is returned. If the calling function cannot be determined, the atom
+ <c><![CDATA[undefined]]></c> is returned. Can only be used in the
+ <c><![CDATA[MatchBody]]></c> part when tracing.</p>
+ <p>Notice that if a "technically built in function" (that is, a
+ function not written in Erlang) is traced, the
+ <c><![CDATA[caller_line]]></c> function sometimes returns the atom
+ <c><![CDATA[undefined]]></c>. The calling
+ Erlang function is not available during such calls.</p>
+ </item>
<tag><c>display</c></tag>
<item>
<p>For debugging purposes only. Displays the single argument as an
@@ -867,7 +889,7 @@
['$_']}]
]]></code>
- <p>Function <seemfa marker="stdlib:ets#test_ms/2"><c>ets:test_ms/2></c></seemfa>
+ <p>Function <seemfa marker="stdlib:ets#test_ms/2"><c>ets:test_ms/2</c></seemfa>
can be useful for testing complicated ETS matches.</p>
</section>
</chapter>
diff --git a/erts/doc/src/notes.xml b/erts/doc/src/notes.xml
index 8363f2b647..7f74df820d 100644
--- a/erts/doc/src/notes.xml
+++ b/erts/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2004</year><year>2022</year>
+ <year>2004</year><year>2023</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -31,6 +31,1692 @@
</header>
<p>This document describes the changes made to the ERTS application.</p>
+<section><title>Erts 13.2</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>Fixed a bug on Windows where
+ <c>file:read_file_info/1</c> would fail for files with
+ corrupt metadata.</p>
+ <p>
+ Own Id: OTP-18348 Aux Id: GH-6356 </p>
+ </item>
+ <item>
+ <p>
+ Fix <c>process_info(_, binary)</c> to again include
+ "writable binaries" which were lost in OTP-25.0. Writable
+ binaries are an optimization used when binaries are
+ appended upon in a loop.</p>
+ <p>
+ Own Id: OTP-18373 Aux Id: PR-6574, GH-6573 </p>
+ </item>
+ <item>
+ <p>
+ Fix rare race when receiving fragmented messages on a
+ terminating connection. Could potentially cause memory
+ leaks as well as double free crashes. Bug exists since
+ OTP 22.0.</p>
+ <p>
+ Own Id: OTP-18382 Aux Id: PR-6585 </p>
+ </item>
+ <item>
+ <p>
+ Fixed bug that could maybe cause problems when a file
+ descriptor number is closed by a linked in driver and
+ then opened (reused) and passed to <c>enif_select</c> by
+ a NIF. No actual symptoms seen, only failed internal
+ assertions in debug build.</p>
+ <p>
+ Own Id: OTP-18391</p>
+ </item>
+ <item>
+ <p>
+ The runtime system could crash when tracing a process
+ executing on a dirty scheduler.</p>
+ <p>
+ Own Id: OTP-18398 Aux Id: PR-6495, GH-6448, GH-5984 </p>
+ </item>
+ <item>
+ <p>In the binary syntax, attempting to match out integers
+ with size exceeding 2 GiB could crash the runtime
+ system.</p>
+ <p>
+ Own Id: OTP-18406 Aux Id: GH-6701 </p>
+ </item>
+ <item>
+ <p>Fixed edge case in floating-point negation where <c>A
+ = 0.0, B = -A</c> did not produce <c>B = -0.0</c> on
+ x86_64 JIT.</p>
+ <p>
+ Own Id: OTP-18411 Aux Id: GH-6717 </p>
+ </item>
+ <item>
+ <p>Fixed an issue in the JIT that could crash the
+ emulator on some platforms.</p>
+ <p>
+ Own Id: OTP-18418</p>
+ </item>
+ <item>
+ <p>
+ Added meta data to the windows installer.</p>
+ <p>
+ Own Id: OTP-18429 Aux Id: PR-6587 GH-4232 GH-6537 </p>
+ </item>
+ <item>
+ <p>Fixed ETS insertion order into <c>bag</c> and
+ <c>duplicate_bag</c> of tuples with identical keys when
+ passed in a list to <c>ets:insert/2</c>. The insert order
+ has been head-to-tail but was accidentally changed in OTP
+ 23.0. For <c>bag</c> it was reverted (tail-to-head),
+ while for <c>duplicate_bag</c> it was sometimes reverted
+ depending on the length of the list and number of
+ "reductions" left for the calling process.</p> <p>This
+ fix changes the insert order of <c>ets:insert/2</c> back
+ to always be head-to-tail of the list argument.</p>
+ <p>
+ Own Id: OTP-18434 Aux Id: PR-6752 </p>
+ </item>
+ <item>
+ <p>With the JIT for AArch64 (AMD64), calling <c>bxor</c>
+ in with non-integer arguments in a guard would crash the
+ runtime system.</p>
+ <p>
+ Own Id: OTP-18454 Aux Id: PR-6839 </p>
+ </item>
+ <item>
+ <p>
+ Fix bug regarding process flag <c>max_heap_size</c>.
+ Could cause strange behavior when a process was killed
+ due to exceeding the limit.</p>
+ <p>
+ Own Id: OTP-18457 Aux Id: PR-6816 </p>
+ </item>
+ <item>
+ <p>
+ Fixed binary comprehensions to be similar to other
+ creation of binary data with respect to its contribution
+ of triggering garbage collection.</p>
+ <p>
+ Own Id: OTP-18458</p>
+ </item>
+ <item>
+ <p>In rare circumstances, when a process exceeded its
+ allowed heap size set by option <c>max_heap_size</c>, it
+ would not be killed as it should be, but instead enter a
+ kind of zombie state it would never get out of.</p>
+ <p>
+ Own Id: OTP-18463 Aux Id: PR-6858 </p>
+ </item>
+ <item>
+ <p>Instead of crashing, the <c>list_to_integer/1</c> and
+ <c>list_to_integer/2</c> BIFs now raise the
+ <c>system_limit</c> exception for overlong lists that
+ can't be converted to integers. Similarly, the
+ <c>string:to_integer/1</c> BIF now returns
+ <c>{error,system_limit}</c> for overlong lists.</p>
+ <p>
+ Own Id: OTP-18475 Aux Id: PR-6897 </p>
+ </item>
+ <item>
+ <p>
+ Active process aliases of a process at its termination
+ leaked memory.</p>
+ <p>
+ Own Id: OTP-18496 Aux Id: GH-6947, PR-6953 </p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Support for fully asynchronous distributed signaling
+ where send operations <em>never</em> block. This
+ functionality is by default disabled and can be enabled
+ per process. For more information see the documentation
+ of <seeerl
+ marker="erts:erlang#process_flag_async_dist"><c>process_flag(async_dist,
+ Bool)</c></seeerl>.</p>
+ <p>
+ Own Id: OTP-18374 Aux Id: PR-6632 </p>
+ </item>
+ <item>
+ <p>Added the <c>+JPperf no_fp</c> option to explicitly
+ disable Erlang frame pointers otherwise added when using
+ the <c>+JPperf map</c> option.</p>
+ <p>
+ Own Id: OTP-18426</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 13.1.5</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>Comparisons between small numbers and pids or ports
+ would in some edge cases say that the number was greater
+ than the pid or port, violating the term order.</p>
+ <p>
+ Own Id: OTP-18415</p>
+ </item>
+ <item>
+ <p>
+ <c>process_info(Pid, status)</c> when <c>Pid /=
+ self()</c> could return an erroneous result.</p>
+ <p>
+ Own Id: OTP-18421 Aux Id: PR-6806 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 13.1.4</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>Fixed a bug in selective receive optimization that
+ could crash 32-bit emulators.</p>
+ <p>
+ Own Id: OTP-18383 Aux Id: ERIERL-905 </p>
+ </item>
+ <item>
+ <p>
+ A race condition which was very rarely triggered could
+ cause the signal queue of a process to become
+ inconsistent causing the runtime system to crash.</p>
+ <p>
+ Own Id: OTP-18388 Aux Id: OTP-17462, PR-6662 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 13.1.3</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Fix perf/gdb JIT symbols to not contain
+ <c>CodeInfoPrologue</c> for the JIT internal module
+ erts_beamasm.</p>
+ <p>
+ Own Id: OTP-18256 Aux Id: PR-6316 </p>
+ </item>
+ <item>
+ <p>
+ Fixed minor memory leaks.</p>
+ <p>
+ Own Id: OTP-18281 Aux Id: PR-4840 </p>
+ </item>
+ <item>
+ <p>Fix bugs in <c>ets:insert</c> and
+ <c>ets:insert_new</c> when called with a list of tuples
+ to insert while a concurrent process either deletes or
+ renames the table. The table deletion could be done with
+ <c>ets:delete/1</c> or be caused by termination of the
+ table owning process.</p> <p>Symptoms are either VM crash
+ or strange incorrect behavior from the insert operation.
+ The risk of triggering the bugs increases with the length
+ of the list of tuple to insert. Bugs exist since OTP
+ 23.0.</p>
+ <p>
+ Own Id: OTP-18284 Aux Id: PR-6305 </p>
+ </item>
+ <item>
+ <p>
+ Boost execution of scheduled thread progress jobs. This
+ to prevent memory exhaustion in extremely rapid
+ allocation/deallocation scenarios, such as repeated ETS
+ table creations/deletions.</p>
+ <p>
+ Own Id: OTP-18294 Aux Id: PR-6390 </p>
+ </item>
+ <item>
+ <p>
+ Fix segv crash during crash dumping an ETS table doing
+ <c>ets:delete_all_objects</c>.</p>
+ <p>
+ Own Id: OTP-18295</p>
+ </item>
+ <item>
+ <p>
+ Spec for function net:if_names/0 incorrect</p>
+ <p>
+ Own Id: OTP-18296 Aux Id: OTP-16464 </p>
+ </item>
+ <item>
+ <p>
+ Fix bug in <c>binary_to_term</c> decoding a binary term
+ 2Gbyte or larger.</p>
+ <p>
+ Own Id: OTP-18306 Aux Id: GH-6393, PR-6401 </p>
+ </item>
+ <item>
+ <p>Documentation of <seemfa
+ marker="erts:erlang#module_loaded/1"><c>erlang:module_loaded/1</c></seemfa>
+ has been adjusted:</p> <list><item> It did not previously
+ say that the BIF only returns <c>true</c> for modules
+ loaded as <i>current code</i>. </item><item> The warning
+ claiming that the BIF should only be used by the code
+ server has been removed. </item></list>
+ <p>
+ Own Id: OTP-18313 Aux Id: PR-6456 </p>
+ </item>
+ <item>
+ <p>
+ Fix <c>list_to_atom/1</c> for negative code points. Could
+ either return with a positive code point or fail with an
+ incorrect exception.</p>
+ <p>
+ Own Id: OTP-18321</p>
+ </item>
+ <item>
+ <p>Fix rare bug causing VM crash when sending to a pid of
+ a spawning process returned from
+ <c>erlang:processes/0</c>.</p> <p>Only seen when provoked
+ by system process literal_area_collector, triggered by a
+ module purge operation, on a VM started with +Meamin (no
+ customized allocators).</p>
+ <p>
+ Own Id: OTP-18322 Aux Id: PR-6479 </p>
+ </item>
+ <item>
+ <p>
+ gen_udp:open/2 with option(s) add_membership or
+ drop_membership would drop earlier options.</p>
+ <p>
+ Own Id: OTP-18323 Aux Id: #6476 </p>
+ </item>
+ <item>
+ <p>
+ The <seemfa
+ marker="kernel:inet#setopts/2"><c>inet:setopts/2</c></seemfa>
+ <c>{reuseaddr, true}</c> option will now be ignored on
+ Windows unless the socket is an UDP socket. For more
+ information see the documentation of the <c>reuseaddr</c>
+ option part of the documentation of
+ <c>inet:setopts/2</c>.</p>
+ <p>
+ Prior to OTP 25 the <c>{reuseaddr, true}</c> option was
+ ignored for all sockets on Windows, but as of OTP 25.0
+ this was changed so that it was not ignored for any
+ sockets.</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-18324 Aux Id: GH-6461, PR-6481 </p>
+ </item>
+ <item>
+ <p>
+ Fix bug in <c>binary_to_term</c> decoding a list of
+ length 1G or longer.</p>
+ <p>
+ Own Id: OTP-18328 Aux Id: GH-6439, PR-6440 </p>
+ </item>
+ <item>
+ <p>Fix bug in <c>binary_to_term</c> (and distributed
+ receive) when decoding a large map (&gt;32 keys) with
+ unsorted small maps (&lt;= 32) as keys of the large
+ map.</p>
+ <p>This was only a problem if the term was encoded by
+ <c>erl_interface</c>, <c>jinterface</c> or otherwise, as
+ the VM itself always encodes small maps with sorted
+ keys.</p>
+ <p>The "binary_to_term" would appear as successful but
+ the created large map was internally inconsistent. The
+ smaller key-maps could not be found with maps:get and
+ friends. Other operations such as map compare and merge
+ could probably also give incorrect results.</p>
+ <p>
+ Own Id: OTP-18343 Aux Id: GH-6496 </p>
+ </item>
+ <item>
+ <p>
+ Fix Windows bug in <c>open_port({spawn, Command}, ..)</c>
+ when <c>Command</c> is found via the OS search PATH and
+ that directory path contains white spaces. The port
+ program would start but the command line arguments to it
+ could be incorrect.</p>
+ <p>
+ Own Id: OTP-18345 Aux Id: GH-6387, PR-6396 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 13.1.2.1</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>Fixed a bug in selective receive optimization that
+ could crash 32-bit emulators.</p>
+ <p>
+ Own Id: OTP-18383 Aux Id: ERIERL-905 </p>
+ </item>
+ <item>
+ <p>
+ A race condition which was very rarely triggered could
+ cause the signal queue of a process to become
+ inconsistent causing the runtime system to crash.</p>
+ <p>
+ Own Id: OTP-18388 Aux Id: OTP-17462, PR-6662 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 13.1.2</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Add abandon carrier free utilization limit
+ (<c>+Muacful</c>) option to erts_alloc. This option
+ allows the user to mark unused segments in a memory
+ carrier as re-useable by the OS if needed.</p>
+ <p>
+ This functionality was a non-configurable default before
+ Erlang/OTP 25, but removed due to performance issues.</p>
+ <p>
+ Own Id: OTP-18290 Aux Id: ERIERL-866 PR-6378 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 13.1.1</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Listen sockets created with the socket module, leaked
+ (erlang-) monitors.</p>
+ <p>
+ Own Id: OTP-18240 Aux Id: #6285 </p>
+ </item>
+ <item>
+ <p>
+ <seemfa
+ marker="erts:erlang#dist_ctrl_get_data_notification/1">Notifications
+ about available distribution data</seemfa> sent to
+ distribution controller processes could be lost.
+ Distribution controller processes can be used when
+ implementing an alternative distribution carrier. The
+ default distribution over tcp was not effected and the
+ bug was also not present on x86/x86_64 platforms.</p>
+ <p>
+ Own Id: OTP-18258 Aux Id: GH-6309, PR-6324 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 13.1</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Fixed inconsistency bugs in <seeerl
+ marker="kernel:global"><c>global</c></seeerl> due to
+ <c>nodeup</c>/<c>nodedown</c> messages not being
+ delivered before/after traffic over connections. Also
+ fixed various other inconsistency bugs and deadlocks in
+ both <seeerl
+ marker="kernel:global_group"><c>global_group</c></seeerl>
+ and <c>global</c>.</p>
+ <p>
+ As building blocks for these fixes, a new BIF <seemfa
+ marker="erts:erlang#nodes/2"><c>erlang:nodes/2</c></seemfa>
+ has been introduced and <seemfa
+ marker="kernel:net_kernel#monitor_nodes/2"><c>net_kernel:monitor_nodes/2</c></seemfa>
+ has been extended.</p>
+ <p>
+ The <seecom
+ marker="erts:erl#hidden"><c>-hidden</c></seecom> and
+ <seecom
+ marker="erts:erl#connect_all"><c>-connect_all</c></seecom>
+ command line arguments did not work if multiple instances
+ were present on the command line which has been fixed.
+ The new kernel parameter <seeapp
+ marker="kernel:kernel_app#connect_all"><c>connect_all</c></seeapp>
+ has also been introduced in order to replace the
+ <c>-connect_all</c> command line argument.</p>
+ <p>
+ Own Id: OTP-17934 Aux Id: PR-6007 </p>
+ </item>
+ <item>
+ <p>
+ Fixed IPv6 multicast_if and membership socket options.</p>
+ <p>
+ Own Id: OTP-18091 Aux Id: #5789 </p>
+ </item>
+ <item>
+ <p>
+ Accept funs (NEW_FUN_EXT) with incorrectly encoded size
+ field. This is a workaround for a bug (OTP-18104)
+ existing in OTP 23 and 24 that could cause incorrect size
+ fields in certain cases. The emulator does not use the
+ decoded size field, but <c>erl_interface</c> still does
+ and is not helped by this workaround.</p>
+ <p>
+ Own Id: OTP-18093 Aux Id: OTP-18104, PR-5987 </p>
+ </item>
+ <item>
+ <p>
+ Fixed issue with inet:getifaddrs hanging on pure IPv6
+ Windows</p>
+ <p>
+ Own Id: OTP-18102 Aux Id: #5904 </p>
+ </item>
+ <item>
+ <p>Fix faulty distribution encoding of terms with
+ either</p> <list> <item>a fun with bit-string or
+ export-fun in its environment when encoded toward a not
+ yet established (pending) connection</item> <item>or a
+ fun with a binary/bitstring, in its environment,
+ referring to an off-heap binary (larger than 64
+ bytes).</item> </list> <p>The symptom could be failed
+ decoding on the receiving side leading to aborted
+ connection. Fix OTP-18093 is a workaround for theses bugs
+ that makes the VM accepts such faulty encoded funs.</p>
+ <p>The first encoding bug toward pending connection
+ exists only in OTP 23 and 24, but the second one exists
+ also on OTP 25.</p>
+ <p>
+ Own Id: OTP-18104 Aux Id: OTP-18093 </p>
+ </item>
+ <item>
+ <p>
+ Fixed emulator crash that could happen during crashdump
+ generation of ETS tables with options <c>ordered_set</c>
+ and <c>{write_concurrency,true}</c>.</p>
+ <p>
+ Own Id: OTP-18144 Aux Id: GH-5981 </p>
+ </item>
+ <item>
+ <p>
+ Retrieval of monotonic and system clock resolution on
+ MacOS could cause a crash and/or erroneous results.</p>
+ <p>
+ Own Id: OTP-18160 Aux Id: PR-6103 </p>
+ </item>
+ <item>
+ <p>
+ Fix bug where the max allowed size of <c>erl +hmax</c>
+ was lower than what was allowed by <c>process_flag</c>.</p>
+ <p>
+ Own Id: OTP-18161 Aux Id: PR-6081 </p>
+ </item>
+ <item>
+ <p>On computers with ARM64 (AArch64) processors, the JIT
+ could generate incorrect code when more than 4095 bits
+ were skipped at the tail end of a binary match.</p>
+ <p>
+ Own Id: OTP-18201</p>
+ </item>
+ <item>
+ <p>In rare circumstances, an <c>is_binary/1</c> guard
+ test could succeed when given a large integer.</p>
+ <p>
+ Own Id: OTP-18216 Aux Id: GH-6239, PR-6240 </p>
+ </item>
+ <item>
+ <p>
+ Fix bug causing <c>ets:info</c> (and sometimes
+ <c>ets:whereis</c>) to return 'undefined' for an existing
+ table if a concurrent process were doing
+ <c>ets:insert</c> with a long list on the same table.</p>
+ <p>
+ Own Id: OTP-18218 Aux Id: ERIERL-855 </p>
+ </item>
+ <item>
+ <p>
+ Fix writing and reading of more than 2 GB in a single
+ read/write operation on macOS. Before this fix attempting
+ to read/write more than 2GB would result in
+ <c>{error,einval}</c>.</p>
+ <p>
+ Own Id: OTP-18222 Aux Id: PR-6248 GH-6242 </p>
+ </item>
+ <item>
+ <p>
+ Fix bug sometimes causing emulator crash at node shutdown
+ when there are pending connections. Only seen when
+ running duel distribution protocols, inet_drv and
+ inet_tls_dist.</p>
+ <p>
+ Own Id: OTP-18243 Aux Id: GH-6247, PR-6258 </p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>Yield when adjusting large process message queues due
+ to</p> <list> <item><p>copying terms from a literal area
+ prior to removing the literal area.</p></item>
+ <item><p>changing the <c>message_queue_data</c> state
+ from <c>on_heap</c> to <c>off_heap</c>.</p></item>
+ </list> <p>The message queue adjustment work will now be
+ interleaved with all other types of work that processes
+ have to do, even other message queue adjustment work.</p>
+ <p>
+ Own Id: OTP-17340 Aux Id: PR-6133 </p>
+ </item>
+ <item>
+ <p>
+ Add rudimentary debug feature (option) for the
+ inet-driver based sockets, such as gen_tcp and gen_udp.</p>
+ <p>
+ Own Id: OTP-18032</p>
+ </item>
+ <item>
+ <p>
+ Introduced the <c>hidden</c> and <c>dist_listen</c>
+ options to <seemfa
+ marker="kernel:net_kernel#start/2"><c>net_kernel:start/2</c></seemfa>.</p>
+ <p>
+ Also documented the <seecom
+ marker="erts:erl#dist_listen"><c>-dist_listen</c></seecom>
+ command line argument which was erroneously documented as
+ a <c>kernel</c> parameter and not as a command line
+ argument.</p>
+ <p>
+ Own Id: OTP-18107 Aux Id: PR-6009 </p>
+ </item>
+ <item>
+ <p>
+ New documentation chapter "Debugging NIFs and Port
+ Drivers" under Interoperability Tutorial.</p>
+ <p>
+ Own Id: OTP-18109</p>
+ </item>
+ <item>
+ <p>
+ Add new API function erl_features:configurable/0</p>
+ <p>
+ Own Id: OTP-18199 Aux Id: PR-5790 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 13.0.4</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ The <seemfa
+ marker="erlang#monitor/3"><c>monitor/3</c></seemfa> BIF
+ did not apply options to the created monitor if the
+ target process or port did not exist. That is, the
+ corresponding down message would get a <c>`DOWN`</c> tag
+ even if a custom tag had been set, and the returned
+ reference was not an alias even if the <c>alias</c>
+ option had been passed.</p>
+ <p>
+ Own Id: OTP-18190 Aux Id: GH-6185, PR-6209 </p>
+ </item>
+ <item>
+ <p>
+ The <seemfa
+ marker="erts:erlang#monotonic_time/1"><c>erlang:monotonic_time/1</c></seemfa>,
+ <seemfa
+ marker="erts:erlang#system_time/1"><c>erlang:system_time/1</c></seemfa>,
+ <seemfa
+ marker="erts:erlang#time_offset/1"><c>erlang:time_offset/1</c></seemfa>,
+ and <seemfa
+ marker="kernel:os#system_time/1"><c>os:system_time/1</c></seemfa>
+ BIFs erroneously failed when passed the argument
+ <c>native</c>.</p>
+ <p>
+ Own Id: OTP-18197 Aux Id: GH-6165, PR-6213 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 13.0.3</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>Distributed exit signals could be lost under the
+ following conditions:</p> <list> <item><p> An exit signal
+ from a parent process to a child process was lost if:</p>
+ <list> <item><p> the parent process terminated before the
+ spawn request that created the child had completed,
+ </p></item> <item><p> the spawn request set up a link
+ between parent and child </p></item> <item><p> the spawn
+ request was distributed, and </p></item> <item><p> the
+ exit reason was larger than one machine word. </p></item>
+ </list> </item> <item><p> Loss of a connection over which
+ a not yet completed spawn request was ongoing could cause
+ loss of exit signals. Such loss of exit signals was very
+ rare. Besides the above described connection loss also
+ the following conditions had to be satisfied:</p> <list>
+ <item><p> The spawn request that was interrupted by the
+ connection loss also had to set up a link between the
+ parent process and the child process. </p></item>
+ <item><p> The parent process that issued the spawn
+ request also had to be terminating while the spawn
+ request was interrupted by the connection loss.
+ </p></item> <item><p> The same parent process also had to
+ have made other spawn requests to other nodes than to the
+ node to which the connection was lost. </p></item>
+ <item><p> These spawn requests to the other nodes also
+ had to set up links. </p></item> <item><p> These spawn
+ requests to the other nodes also had to be not yet
+ completed at the time of the connection loss. That is,
+ the spawn reply from the child process had not yet
+ reached the parent process. </p></item> </list> <p>If all
+ the conditions above were met, exit signals to the
+ children spawned due to the above described spawn
+ requests to other nodes <em>could</em> be lost.</p>
+ <p>The above bug also caused a significant memory leak
+ when it was triggered since the destruction of the parent
+ process never completed.</p> </item> </list>
+ <p>
+ Own Id: OTP-18164 Aux Id: PR-6114 </p>
+ </item>
+ <item>
+ <p>
+ A race could cause <c>process_info(Pid,
+ message_queue_len)</c> on other processes to return
+ invalid results.</p>
+ <p>
+ Own Id: OTP-18169 Aux Id: PR-6134 </p>
+ </item>
+ <item>
+ <p>
+ Fixed reduction counting for handling process system
+ tasks.</p>
+ <p>
+ Own Id: OTP-18170 Aux Id: PR-6135 </p>
+ </item>
+ <item>
+ <p>
+ Priority elevation of terminating processes did not work
+ which could cause execution of such processes to be
+ delayed.</p>
+ <p>
+ Own Id: OTP-18175 Aux Id: PR-6142 </p>
+ </item>
+ <item>
+ <p>
+ An unlink operation made by a process that terminated
+ before the unlink operation completed, i.e., before it
+ had received an unlink-ack signal from the linked
+ process, caused an exit signal to erroneously be sent
+ from the terminating process to the process being
+ unlinked. This exit signal would most often be ignored by
+ the receiver, but if the receiver of the exit signal
+ concurrently set up a new link, it could receive the exit
+ signal with the actual exit reason of the terminating
+ process instead of a <c>noproc</c> exit reason. It is
+ however very hard to detect that this has happened and
+ has no obvious negative consequences, so it should be
+ considered harmless.</p>
+ <p>
+ A distributed unlink-ack signal received by a terminating
+ process was also not properly removed which could cause a
+ minor memory leak.</p>
+ <p>
+ Own Id: OTP-18177 Aux Id: PR-6150 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 13.0.2</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>On computers with the ARM64 (AArch64) architecture
+ (such as Apple Silicon Macs) a <c>rem</c> expression
+ followed by a <c>div</c> expression with the same
+ operands could evaluate to the wrong result if the result
+ of the <c>rem</c> expression was unused.</p>
+ <p>
+ Own Id: OTP-18143</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 13.0.1</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ A <c>spawn_reply</c> signal from a remote node could be
+ delayed and be delivered after other signals from the
+ newly spawned process.</p>
+ <p>
+ When this bug triggered, the connection to the node where
+ the process was spawned sometimes could be taken down due
+ to the bug. The following error message would then be
+ logged if this happened: <c>Missing 'spawn_reply' signal
+ from the node &lt;RemoteNode&gt; detected by &lt;Pid&gt;
+ on the node &lt;LocalNode&gt;. The node
+ &lt;RemoteNode&gt; probably suffers from the bug with
+ ticket id OTP-17737.</c></p>
+ <p>
+ This bug only affected processes which had enabled
+ <seeerl
+ marker="erts:erlang#process_flag_message_queue_data"><c>off_heap</c>
+ <c>message_queue_data</c></seeerl> and parallel reception
+ of signals had been automatically enabled.</p>
+ <p>
+ This bug was introduced in OTP 25.0, ERTS version 13.0.</p>
+ <p>
+ Own Id: OTP-18105 Aux Id: OTP-16982, PR-6003 </p>
+ </item>
+ <item>
+ <p>
+ Fixed type spec of <c>erlang:system_info(dist_ctrl)</c>.</p>
+ <p>
+ Own Id: OTP-18106 Aux Id: PR-5992 </p>
+ </item>
+ <item>
+ <p>
+ The zlib built in to the runtime system has been updated
+ to version 1.2.12. (Note that on most platforms, the
+ platform's own zlib is used.)</p>
+ <p>
+ Own Id: OTP-18123 Aux Id: GH-5994 </p>
+ </item>
+ <item>
+ <p>
+ The <c>erlang:is_alive()</c> BIF could return <c>true</c>
+ before configured distribution service was available.
+ This bug was introduced in OTP 25.0 ERTS version 13.0.</p>
+ <p>
+ The <c>erlang:monitor_node()</c> and
+ <c>erlang:monitor()</c> BIFs could erroneously fail even
+ though configured distribution service was available.
+ This occurred if these BIFs were called after the
+ distribution had been started using dynamic node name
+ assignment but before the name had been assigned.</p>
+ <p>
+ Own Id: OTP-18124 Aux Id: OTP-17558, PR-6032 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 13.0</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ The socket option 'reuseaddr' is *no longer* ignored on
+ Windows.</p>
+ <p>
+ Own Id: OTP-17447 Aux Id: GH-4819 </p>
+ </item>
+ <item>
+ <p>
+ The growth rate of writable binaries has been adjusted to
+ only increase by 20% after 16MB in size. Before this
+ change the size would always double.</p>
+ <p>
+ This change may degrade write performance of large
+ binaries.</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-17569 Aux Id: PR-4793 </p>
+ </item>
+ <item>
+ <p>
+ Fix reduction counting bug in <c>re:run</c> that caused
+ the function to yield too frequently when doing
+ <c>global</c> matches.</p>
+ <p>
+ Own Id: OTP-17661 Aux Id: PR-5165 </p>
+ </item>
+ <item>
+ <p>
+ Fix spelling mistakes in epmd error messages.</p>
+ <p>
+ Own Id: OTP-17758 Aux Id: PR-5391 </p>
+ </item>
+ <item>
+ <p>
+ Fix bug where the "newshell" would trigger a newline at
+ the column width of the terminal, even if the next
+ character to be printed was a newline. This would cause
+ the terminal to render two newlines instead of one.</p>
+ <p>
+ Own Id: OTP-17779 Aux Id: GH-5403 PR-5599 </p>
+ </item>
+ <item>
+ <p>
+ Fix the memory value returned from
+ <c>ets:info(Tid,memory)</c> when the
+ <c>read_concurrency</c> option is used.</p>
+ <p>
+ Before this fix the memory used by the scheduler specific
+ lock cache lines was not counted towards the total. This
+ caused the returned memory usage to be very incorrect on
+ systems with many schedulers for tables with man locks.</p>
+ <p>
+ Own Id: OTP-17832 Aux Id: PR-5494 </p>
+ </item>
+ <item>
+ <p>
+ Fix the undocumented <c>--profile_boot</c> option to work
+ again.</p>
+ <p>
+ Own Id: OTP-17836 Aux Id: PR-5546 </p>
+ </item>
+ <item>
+ <p>
+ [socket] Encode of sockaddr has been improved.</p>
+ <p>
+ Own Id: OTP-18020</p>
+ </item>
+ <item>
+ <p>
+ Fix <c>erl_child_setup</c> (the program used by
+ <c>open_port({spawn,...})</c> and <c>os:cmd/1</c>) to
+ better handle partial reads from the Erlang VM.</p>
+ <p>
+ Own Id: OTP-18047 Aux Id: PR-5861 </p>
+ </item>
+ <item>
+ <p>The runtime system would crash when attempting to
+ create more than 33554431 atoms.</p>
+ <p>
+ Own Id: OTP-18068 Aux Id: GH-5903 </p>
+ </item>
+ </list>
+ </section>
+
+
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Users can now configure ETS tables with the
+ <c>{write_concurrency, auto}</c> option. This option
+ forces tables to automatically change the number of locks
+ that are used at run-time depending on how much
+ concurrency is detected. The <c>{decentralized_counters,
+ true}</c> option is enabled by default when
+ <c>{write_concurrency, auto}</c> is active.</p>
+ <p>
+ Benchmark results comparing this option with the other
+ ETS optimization options are available here:</p>
+ <p>
+ https://erlang.org/bench/ets_bench_result_lock_config.html</p>
+ <p>
+ Own Id: OTP-15991 Aux Id: PR-5208 </p>
+ </item>
+ <item>
+ <p>
+ The net module now works on Windows.</p>
+ <p>
+ Own Id: OTP-16464</p>
+ </item>
+ <item>
+ <p>To enable more optimizations, BEAM files compiled with
+ OTP 21 and earlier cannot be loaded in OTP 25.</p>
+ <p>
+ Own Id: OTP-16702</p>
+ </item>
+ <item>
+ <p>
+ Optimize minor garbage collection for processes with
+ large number of binaries, funs and/or external
+ pids/ports/refs. This is a continuation of the
+ optimization (OTP-17602) released in OTP-24.1.</p>
+ <p>
+ Own Id: OTP-16852 Aux Id: ERL-1347, PR-5195 </p>
+ </item>
+ <item>
+ <p>
+ The signal queue of a process with
+ message_queue_data=off_heap* has been optimized to allow
+ parallel reception of signals from multiple processes. </p>
+ <p>
+ This is possible to do as Erlang only guarantees that
+ signals (i.e., message signals and non-message signals)
+ sent from a single process to another process are ordered
+ in send order. However, there are no ordering guarantees
+ for signals sent from different processes to a particular
+ process. Therefore, several processes can send signals in
+ parallel to a specific process without synchronizing with
+ each other. However, such signal sending was previously
+ always serialized as the senders had to acquire the lock
+ for the outer signal queue of the receiving process. This
+ parallel signal sending optimization yields much better
+ scalability for signal sending than what was previously
+ possible, see
+ https://erlang.org/bench/sigq_bench_result.html for
+ benchmark results.</p>
+ <p>
+ * Information about how to enable the
+ message_queue_data=off_heap setting can be found in the
+ documentation of the function erlang:process_flag/2.</p>
+ <p>
+ Own Id: OTP-16982 Aux Id: PR-5020 </p>
+ </item>
+ <item>
+ <p>The JIT now works for 64-bit ARM processors.</p>
+ <p>
+ Own Id: OTP-17119 Aux Id: PR-4869 </p>
+ </item>
+ <item>
+ <p>
+ Added support for the compile attribute <c>-nifs()</c> to
+ empower compiler and loader with information about which
+ functions may be overridden as NIFs by
+ <c>erlang:load_nif/2</c>. It is recommended to use this
+ attribute in all modules that load NIF libraries.</p>
+ <p>
+ Own Id: OTP-17151 Aux Id: ERIERL-590, PR-5479 </p>
+ </item>
+ <item>
+ <p>
+ A test case has been added to the otp_SUITE that test
+ that the dependency versions for OTP's applications are
+ correct. The test case uses xref to check if the used
+ functions are available in the specified dependency
+ versions. The test case depends on the Erlang/OTP team's
+ testing infrastructure and will be skipped if its
+ dependencies are not met.</p>
+ <p>
+ Own Id: OTP-17224</p>
+ </item>
+ <item>
+ <p>
+ An Erlang installation directory is now relocatable on
+ the file system given that the paths in the
+ installation's <c>RELEASES</c> file are paths that are
+ relative to the installations root directory. The
+ <c>`release_handler:create_RELEASES/4</c> function can
+ generate a <c>RELEASES</c> file with relative paths if
+ its <c>RootDir</c> parameter is set to the empty string.</p>
+ <p>
+ Own Id: OTP-17304</p>
+ </item>
+ <item>
+ <p>The following distribution flags are now mandatory:
+ <c>DFLAG_BIT_BINARIES</c>, <c>DFLAG_EXPORT_PTR_TAG</c>,
+ <c>DFLAG_MAP_TAGS</c>, <c>DFLAG_NEW_FLOATS</c>, and
+ <c>DFLAG_FUN_TAGS</c>. This mainly concerns libraries or
+ application that implement the distribution protocol
+ themselves.</p>
+ <p>
+ Own Id: OTP-17318 Aux Id: PR-4972 </p>
+ </item>
+ <item>
+ <p>
+ Input for <c>configure</c> scripts adapted to
+ <c>autoconf</c> 2.71.</p>
+ <p>
+ Own Id: OTP-17414 Aux Id: PR-4967 </p>
+ </item>
+ <item>
+ <p>When binary construction using the binary syntax
+ fails, the error message printed in the shell and by
+ <c>erl_error:format_exception/3,4</c> will contain more
+ detailed information about what went wrong.</p>
+ <p>
+ Own Id: OTP-17504 Aux Id: GH-4971, PR-5281, PR-5752 </p>
+ </item>
+ <item>
+ <p>
+ The configuration files <seecom
+ marker="erts:erl"><c>.erlang</c></seecom>, <seeguide
+ marker="system/reference_manual:distributed"><c>.erlang.cookie</c></seeguide>
+ and <seeerl
+ marker="stdlib:beam_lib#.erlang.crypt"><c>.erlang.crypt</c></seeerl>
+ can now be located in the XDG Config Home directory.</p>
+ <p>
+ See the documentation for each file and
+ <c>filename:basedir/2</c> for more details.</p>
+ <p>
+ Own Id: OTP-17554 Aux Id: GH-5016 PR-5408 OTP-17821 </p>
+ </item>
+ <item>
+ <p>
+ Make <c>byte_size/1</c> and <c>binary_part/2/3</c>
+ callable from match specs (in ETS and tracing).</p>
+ <p>
+ Own Id: OTP-17555 Aux Id: PR-5027 </p>
+ </item>
+ <item>
+ <p>
+ Dynamic node name improvements: <c>erlang:is_alive/0</c>
+ changed to return true for pending dynamic node name and
+ new function <c>net_kernel:get_state/0</c>.</p>
+ <p>
+ Own Id: OTP-17558 Aux Id: OTP-17538, PR-5111, GH-5402 </p>
+ </item>
+ <item>
+ <p>
+ A new option called <c>short</c> has been added to the
+ functions <c>erlang:float_to_list</c> and
+ <c>erlang:float_to_binary</c>. This option creates the
+ shortest correctly rounded string representation of the
+ given float that can be converted back to the same float
+ again.</p>
+ <p>
+ Own Id: OTP-17562 Aux Id: GH-4492 </p>
+ </item>
+ <item>
+ <p>
+ The tagged tuple tests and fun-calls have been optimized
+ and are now a little bit cheaper than previously.</p>
+ <p>
+ These optimizations become possible after making sure
+ that all boxed terms have at least one word allocated
+ after the arity word. This has been accomplished by
+ letting all empty tuples refer to the same empty tuple
+ literal which also reduces memory usage for empty tuples.</p>
+ <p>
+ Own Id: OTP-17608</p>
+ </item>
+ <item>
+ <p>
+ The signal queue benchmark in parallel_messages_SUITE and
+ the ETS benchmark in ets_SUITE have benchmark result
+ visualization HTML pages with "fill-screen" buttons to
+ make the graphs bigger. This button did not work as
+ intended before. When pressing the button for a graph,
+ the last graph got replaced with a bigger version and not
+ the one over the button. This is now fixed.</p>
+ <p>
+ Own Id: OTP-17630</p>
+ </item>
+ <item>
+ <p>
+ The test case num_bif_SUITE:t_float_to_string previously
+ failed sometimes as it assumed a certain rounding of
+ floats printed with sprintf but the rounding type is
+ platform specific.</p>
+ <p>
+ Own Id: OTP-17636</p>
+ </item>
+ <item>
+ <p>
+ Optimize interpreter to create heap binaries of small
+ match contexts if possible.</p>
+ <p>
+ This optimization was already done in the JIT.</p>
+ <p>
+ Own Id: OTP-17660 Aux Id: PR-5164 </p>
+ </item>
+ <item>
+ <p>
+ Optimize integer multiplication for x86 JIT</p>
+ <p>
+ Own Id: OTP-17667 Aux Id: PR-5237 </p>
+ </item>
+ <item>
+ <p>
+ Removed use of node creation value zero as a wildcard.
+ Also prevent zero from being used as creation by
+ <c>erl_interface</c> and <c>jinterface</c> nodes.</p>
+ <p>
+ Own Id: OTP-17682 Aux Id: PR-5347 </p>
+ </item>
+ <item>
+ <p>
+ Distributed spawn operations now require <seeguide
+ marker="erts:erl_dist_protocol#DFLAG_SPAWN">distributed
+ <c>spawn_request()</c></seeguide> support. Distributed
+ <c>spawn_request()</c> was introduced in OTP 23. That is,
+ distributed spawn operations against Erlang nodes of
+ releases prior to OTP 23 will fail.</p>
+ <p>
+ *** POTENTIAL INCOMPATIBILITY ***</p>
+ <p>
+ Own Id: OTP-17683 Aux Id: PR-5306 </p>
+ </item>
+ <item>
+ <p>The Erlang compiler now includes type information in
+ BEAM files, and the JIT can now use that type information
+ to do optimizations such as eliminating or simplifying
+ type tests.</p>
+ <p>
+ Own Id: OTP-17684 Aux Id: PR-5316, PR-5664 </p>
+ </item>
+ <item>
+ <p>Improved the JIT's support for external tools like
+ <c>perf</c> and <c>gdb</c>, allowing them to show line
+ numbers and even the original Erlang source code when
+ that can be found.</p>
+ <p>To aid them in finding the source code, the
+ <c>absolute_path</c> compiler option has been added to
+ embed the absolute file path of a module.</p>
+ <p>
+ Own Id: OTP-17685</p>
+ </item>
+ <item>
+ <p>
+ Add [32-bit] to the Erlang shell title row for 32-bit
+ VMs.</p>
+ <p>
+ Own Id: OTP-17717 Aux Id: PR-5290 </p>
+ </item>
+ <item>
+ <p>Instructions for how to build the runtime system for
+ iOS/iPadOS can now be found in
+ <c>HOWTO/INSTALL.md</c>.</p>
+ <p>
+ Own Id: OTP-17728 Aux Id: PR-5284 </p>
+ </item>
+ <item>
+ <p>
+ Add support for static Elixir NIF modules with
+ non-alphanumeric characters by using new macro
+ <c>STATIC_ERLANG_NIF_LIBNAME</c>.</p>
+ <p>
+ Own Id: OTP-17729 Aux Id: PR-5477 </p>
+ </item>
+ <item>
+ <p>
+ Add new function <c>caller_line</c> to for trace match
+ specifications used by erlang:trace_pattern/3.</p>
+ <p>
+ This new option puts the line number of the caller into
+ the trace message sent to the trace receiver.</p>
+ <p>
+ Own Id: OTP-17753 Aux Id: PR-5305 GH-5297 </p>
+ </item>
+ <item>
+ <p>
+ A new <c>erl</c> command line argument <c>+ssrct</c> has
+ been introduced which will cause the runtime system to
+ skip reading CPU topology information. This reduce start
+ up time especially when the CPU topology is large.
+ Reading of CPU topology information is now also skipped
+ if a user defined CPU topology is set using the
+ <c>+sct</c> command line argument.</p>
+ <p>
+ Own Id: OTP-17762 Aux Id: GH-5204, PR-5219 </p>
+ </item>
+ <item>
+ <p>
+ The default time warp mode will change in Erlang/OTP 26.
+ Added a warning about this upcoming potential
+ incompatibility to the documentation.</p>
+ <p>
+ Own Id: OTP-17772 Aux Id: GH-4965 PR-5644 </p>
+ </item>
+ <item>
+ <p>The emulator will no longer mark unused memory as
+ discardable (e.g. through <c>madvise(2)</c>), as it
+ caused more problems than it solved.</p>
+ <p>
+ Own Id: OTP-17824</p>
+ </item>
+ <item>
+ <p>When a record matching or record update fails, a
+ <c>{badrecord,ExpectedRecordTag}</c> exception used to be
+ raised. In this release, the exception has been changed
+ to <c>{badrecord,ActualValue}</c>, where
+ <c>ActualValue</c> is the actual that was found instead
+ of the expected record.</p>
+ <p>
+ Own Id: OTP-17841 Aux Id: PR-5694 </p>
+ </item>
+ <item>
+ <p>
+ Removed the previously undocumented and unsupported
+ <c>emem</c> tool.</p>
+ <p>
+ Own Id: OTP-17892 Aux Id: PR-5591 </p>
+ </item>
+ <item>
+ <p>
+ Remove version number from the default install path on
+ Windows.</p>
+ <p>
+ Own Id: OTP-17899 Aux Id: PR-5524 </p>
+ </item>
+ <item>
+ <p>
+ On Windows apply the limit flag
+ JOB_OBJECT_LIMIT_BREAKAWAY_OK in the Erlang service to be
+ able to start a OS child process with a different session
+ number.</p>
+ <p>
+ Own Id: OTP-17927 Aux Id: PR-5283 </p>
+ </item>
+ <item>
+ <p>
+ New erl command line option <c>+IOs</c>. It can be used
+ to disable scheduler thread poll optimization, which has
+ been seen to cause degraded event latency in some use
+ cases.</p>
+ <p>
+ Own Id: OTP-17945 Aux Id: GH-4759, PR-5809 </p>
+ </item>
+ <item>
+ <p>
+ An API for multihomed SCTP connect has been added in the
+ guise of <c>gen_sctp:connectx_init/*</c></p>
+ <p>
+ Own Id: OTP-17951 Aux Id: PR-5656 </p>
+ </item>
+ <item>
+ <p>
+ [socket] Add encoding of the field hatype of the type
+ sockaddr_ll (family 'packet').</p>
+ <p>
+ Own Id: OTP-17968 Aux Id: OTP-16464 </p>
+ </item>
+ <item>
+ <p>
+ A cross compilation issue has been fixed about finding
+ libdlpi during the configure phase.</p>
+ <p>
+ Own Id: OTP-17985 Aux Id: GH-5728 </p>
+ </item>
+ <item>
+ <p>
+ <seemfa
+ marker="erts:erlang#process_info/2"><c>process_info/2</c></seemfa>
+ now also accepts <c>parent</c> as argument. When passed,
+ the process identifier of the parent process will be
+ returned.</p>
+ <p>
+ Own Id: OTP-17999 Aux Id: PR-5768 </p>
+ </item>
+ <item>
+ <p>
+ Add function attributes to <c>erl_nif</c> and
+ <c>erl_driver</c> APis to improve compiler detection of
+ interface misuse.</p>
+ <p>
+ Own Id: OTP-18006 Aux Id: PR-5932 </p>
+ </item>
+ <item>
+ <p>
+ The exported type <seetype
+ marker="erts:erlang#send_destination"><c>erlang:send_destination/0</c></seetype>
+ has been introduced.</p>
+ <p>
+ Own Id: OTP-18033 Aux Id: PR-2926, GH-5376 </p>
+ </item>
+ <item>
+ <p>
+ Building of the C/C++ make dependencies on Windows has
+ been optimized to be a lot faster.</p>
+ <p>
+ Own Id: OTP-18036 Aux Id: PR-5846 </p>
+ </item>
+ <item>
+ <p><c>file:sync/1</c> will now use the
+ <c>F_BARRIERFSYNC</c> flag when available on Mac OS.</p>
+ <p>
+ Own Id: OTP-18038</p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 12.3.2.9</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ <c>process_info(Pid, status)</c> when <c>Pid /=
+ self()</c> could return an erroneous result.</p>
+ <p>
+ Own Id: OTP-18421 Aux Id: PR-6806 </p>
+ </item>
+ <item>
+ <p>In rare circumstances, when a process exceeded its
+ allowed heap size set by option <c>max_heap_size</c>, it
+ would not be killed as it should be, but instead enter a
+ kind of zombie state it would never get out of.</p>
+ <p>
+ Own Id: OTP-18463 Aux Id: PR-6858 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 12.3.2.8</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>Fixed a bug in selective receive optimization that
+ could crash 32-bit emulators.</p>
+ <p>
+ Own Id: OTP-18383 Aux Id: ERIERL-905 </p>
+ </item>
+ <item>
+ <p>
+ A race condition which was very rarely triggered could
+ cause the signal queue of a process to become
+ inconsistent causing the runtime system to crash.</p>
+ <p>
+ Own Id: OTP-18388 Aux Id: OTP-17462, PR-6662 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 12.3.2.7</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Spec for function net:if_names/0 incorrect</p>
+ <p>
+ Own Id: OTP-18296 Aux Id: OTP-16464 </p>
+ </item>
+ <item>
+ <p>
+ Fix bug in <c>binary_to_term</c> decoding a binary term
+ 2Gbyte or larger.</p>
+ <p>
+ Own Id: OTP-18306 Aux Id: GH-6393, PR-6401 </p>
+ </item>
+ <item>
+ <p>
+ Fix <c>list_to_atom/1</c> for negative code points. Could
+ either return with a positive code point or fail with an
+ incorrect exception.</p>
+ <p>
+ Own Id: OTP-18321</p>
+ </item>
+ <item>
+ <p>
+ Fix bug in <c>binary_to_term</c> decoding a list of
+ length 1G or longer.</p>
+ <p>
+ Own Id: OTP-18328 Aux Id: GH-6439, PR-6440 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 12.3.2.6</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ <seemfa
+ marker="erts:erlang#dist_ctrl_get_data_notification/1">Notifications
+ about available distribution data</seemfa> sent to
+ distribution controller processes could be lost.
+ Distribution controller processes can be used when
+ implementing an alternative distribution carrier. The
+ default distribution over tcp was not effected and the
+ bug was also not present on x86/x86_64 platforms.</p>
+ <p>
+ Own Id: OTP-18258 Aux Id: GH-6309, PR-6324 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 12.3.2.5</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Fix writing and reading of more than 2 GB in a single
+ read/write operation on macOS. Before this fix attempting
+ to read/write more than 2GB would result in
+ <c>{error,einval}</c>.</p>
+ <p>
+ Own Id: OTP-18222 Aux Id: PR-6248 GH-6242 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 12.3.2.4</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Fix bug causing <c>ets:info</c> (and sometimes
+ <c>ets:whereis</c>) to return 'undefined' for an existing
+ table if a concurrent process were doing
+ <c>ets:insert</c> with a long list on the same table.</p>
+ <p>
+ Own Id: OTP-18218 Aux Id: ERIERL-855 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 12.3.2.3</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>Fix faulty distribution encoding of terms with
+ either</p> <list> <item>a fun with bit-string or
+ export-fun in its environment when encoded toward a not
+ yet established (pending) connection</item> <item>or a
+ fun with a binary/bitstring, in its environment,
+ referring to an off-heap binary (larger than 64
+ bytes).</item> </list> <p>The symptom could be failed
+ decoding on the receiving side leading to aborted
+ connection. Fix OTP-18093 is a workaround for theses bugs
+ that makes the VM accepts such faulty encoded funs.</p>
+ <p>The first encoding bug toward pending connection
+ exists only in OTP 23 and 24, but the second one exists
+ also on OTP 25.</p>
+ <p>
+ Own Id: OTP-18104 Aux Id: OTP-18093 </p>
+ </item>
+ <item>
+ <p>Distributed exit signals could be lost under the
+ following conditions:</p> <list> <item><p> An exit signal
+ from a parent process to a child process was lost if:</p>
+ <list> <item><p> the parent process terminated before the
+ spawn request that created the child had completed,
+ </p></item> <item><p> the spawn request set up a link
+ between parent and child </p></item> <item><p> the spawn
+ request was distributed, and </p></item> <item><p> the
+ exit reason was larger than one machine word. </p></item>
+ </list> </item> <item><p> Loss of a connection over which
+ a not yet completed spawn request was ongoing could cause
+ loss of exit signals. Such loss of exit signals was very
+ rare. Besides the above described connection loss also
+ the following conditions had to be satisfied:</p> <list>
+ <item><p> The spawn request that was interrupted by the
+ connection loss also had to set up a link between the
+ parent process and the child process. </p></item>
+ <item><p> The parent process that issued the spawn
+ request also had to be terminating while the spawn
+ request was interrupted by the connection loss.
+ </p></item> <item><p> The same parent process also had to
+ have made other spawn requests to other nodes than to the
+ node to which the connection was lost. </p></item>
+ <item><p> These spawn requests to the other nodes also
+ had to set up links. </p></item> <item><p> These spawn
+ requests to the other nodes also had to be not yet
+ completed at the time of the connection loss. That is,
+ the spawn reply from the child process had not yet
+ reached the parent process. </p></item> </list> <p>If all
+ the conditions above were met, exit signals to the
+ children spawned due to the above described spawn
+ requests to other nodes <em>could</em> be lost.</p>
+ <p>The above bug also caused a significant memory leak
+ when it was triggered since the destruction of the parent
+ process never completed.</p> </item> </list>
+ <p>
+ Own Id: OTP-18164 Aux Id: PR-6114 </p>
+ </item>
+ <item>
+ <p>
+ A race could cause <c>process_info(Pid,
+ message_queue_len)</c> on other processes to return
+ invalid results.</p>
+ <p>
+ Own Id: OTP-18169 Aux Id: PR-6134 </p>
+ </item>
+ <item>
+ <p>
+ Fixed reduction counting for handling process system
+ tasks.</p>
+ <p>
+ Own Id: OTP-18170 Aux Id: PR-6135 </p>
+ </item>
+ <item>
+ <p>
+ Priority elevation of terminating processes did not work
+ which could cause execution of such processes to be
+ delayed.</p>
+ <p>
+ Own Id: OTP-18175 Aux Id: PR-6142 </p>
+ </item>
+ <item>
+ <p>
+ An unlink operation made by a process that terminated
+ before the unlink operation completed, i.e., before it
+ had received an unlink-ack signal from the linked
+ process, caused an exit signal to erroneously be sent
+ from the terminating process to the process being
+ unlinked. This exit signal would most often be ignored by
+ the receiver, but if the receiver of the exit signal
+ concurrently set up a new link, it could receive the exit
+ signal with the actual exit reason of the terminating
+ process instead of a <c>noproc</c> exit reason. It is
+ however very hard to detect that this has happened and
+ has no obvious negative consequences, so it should be
+ considered harmless.</p>
+ <p>
+ A distributed unlink-ack signal received by a terminating
+ process was also not properly removed which could cause a
+ minor memory leak.</p>
+ <p>
+ Own Id: OTP-18177 Aux Id: PR-6150 </p>
+ </item>
+ <item>
+ <p>
+ The <seemfa
+ marker="erlang#monitor/3"><c>monitor/3</c></seemfa> BIF
+ did not apply options to the created monitor if the
+ target process or port did not exist. That is, the
+ corresponding down message would get a <c>`DOWN`</c> tag
+ even if a custom tag had been set, and the returned
+ reference was not an alias even if the <c>alias</c>
+ option had been passed.</p>
+ <p>
+ Own Id: OTP-18190 Aux Id: GH-6185, PR-6209 </p>
+ </item>
+ <item>
+ <p>
+ The <seemfa
+ marker="erts:erlang#monotonic_time/1"><c>erlang:monotonic_time/1</c></seemfa>,
+ <seemfa
+ marker="erts:erlang#system_time/1"><c>erlang:system_time/1</c></seemfa>,
+ <seemfa
+ marker="erts:erlang#time_offset/1"><c>erlang:time_offset/1</c></seemfa>,
+ and <seemfa
+ marker="kernel:os#system_time/1"><c>os:system_time/1</c></seemfa>
+ BIFs erroneously failed when passed the argument
+ <c>native</c>.</p>
+ <p>
+ Own Id: OTP-18197 Aux Id: GH-6165, PR-6213 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 12.3.2.2</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Fixed emulator crash that could happen during crashdump
+ generation of ETS tables with options <c>ordered_set</c>
+ and <c>{write_concurrency,true}</c>.</p>
+ <p>
+ Own Id: OTP-18144 Aux Id: GH-5981 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 12.3.2.1</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Accept funs (NEW_FUN_EXT) with incorrectly encoded size
+ field. This is a workaround for a bug (OTP-18104)
+ existing in OTP 23 and 24 that could cause incorrect size
+ fields in certain cases. The emulator does not use the
+ decoded size field, but <c>erl_interface</c> still does
+ and is not helped by this workaround.</p>
+ <p>
+ Own Id: OTP-18093 Aux Id: OTP-18104, PR-5987 </p>
+ </item>
+ <item>
+ <p>
+ The zlib built in to the runtime system has been updated
+ to version 1.2.12. (Note that on most platforms, the
+ platform's own zlib is used.)</p>
+ <p>
+ Own Id: OTP-18123 Aux Id: GH-5994 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Erts 12.3.2</title>
<section><title>Fixed Bugs and Malfunctions</title>
@@ -619,7 +2305,7 @@
simultaneously received signals to that port could cause
a runtime system crash. The effected signals are
<c>link</c>, <c>monitor</c> and <c>demonitor</c>. On OTP
- 22 a similiar race could also cause a memory leak when
+ 22 a similar race could also cause a memory leak when
receiving an <c>unlink</c> signal.</p>
<p>
Own Id: OTP-17642 Aux Id: PR-5248 </p>
@@ -1326,7 +3012,7 @@
order to prevent late responses. The <c>gen_statem</c>
behavior still use a proxy process in the distributed
case, since it has always prevented late replies and
- aliases wont work against pre OTP 24 nodes. The proxy
+ aliases won't work against pre OTP 24 nodes. The proxy
process can be removed in OTP 26.</p>
<p>
The alias feature also made it possible to introduce new
@@ -1623,6 +3309,340 @@
</section>
+<section><title>Erts 11.2.2.17</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ <seemfa
+ marker="erts:erlang#dist_ctrl_get_data_notification/1">Notifications
+ about available distribution data</seemfa> sent to
+ distribution controller processes could be lost.
+ Distribution controller processes can be used when
+ implementing an alternative distribution carrier. The
+ default distribution over tcp was not effected and the
+ bug was also not present on x86/x86_64 platforms.</p>
+ <p>
+ Own Id: OTP-18258 Aux Id: GH-6309, PR-6324 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 11.2.2.16</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>Distributed exit signals could be lost under the
+ following conditions:</p> <list> <item><p> An exit signal
+ from a parent process to a child process was lost if:</p>
+ <list> <item><p> the parent process terminated before the
+ spawn request that created the child had completed,
+ </p></item> <item><p> the spawn request set up a link
+ between parent and child </p></item> <item><p> the spawn
+ request was distributed, and </p></item> <item><p> the
+ exit reason was larger than one machine word. </p></item>
+ </list> </item> <item><p> Loss of a connection over which
+ a not yet completed spawn request was ongoing could cause
+ loss of exit signals. Such loss of exit signals was very
+ rare. Besides the above described connection loss also
+ the following conditions had to be satisfied:</p> <list>
+ <item><p> The spawn request that was interrupted by the
+ connection loss also had to set up a link between the
+ parent process and the child process. </p></item>
+ <item><p> The parent process that issued the spawn
+ request also had to be terminating while the spawn
+ request was interrupted by the connection loss.
+ </p></item> <item><p> The same parent process also had to
+ have made other spawn requests to other nodes than to the
+ node to which the connection was lost. </p></item>
+ <item><p> These spawn requests to the other nodes also
+ had to set up links. </p></item> <item><p> These spawn
+ requests to the other nodes also had to be not yet
+ completed at the time of the connection loss. That is,
+ the spawn reply from the child process had not yet
+ reached the parent process. </p></item> </list> <p>If all
+ the conditions above were met, exit signals to the
+ children spawned due to the above described spawn
+ requests to other nodes <em>could</em> be lost.</p>
+ <p>The above bug also caused a significant memory leak
+ when it was triggered since the destruction of the parent
+ process never completed.</p> </item> </list>
+ <p>
+ Own Id: OTP-18164 Aux Id: PR-6114 </p>
+ </item>
+ <item>
+ <p>
+ A race could cause <c>process_info(Pid,
+ message_queue_len)</c> on other processes to return
+ invalid results.</p>
+ <p>
+ Own Id: OTP-18169 Aux Id: PR-6134 </p>
+ </item>
+ <item>
+ <p>
+ Fixed reduction counting for handling process system
+ tasks.</p>
+ <p>
+ Own Id: OTP-18170 Aux Id: PR-6135 </p>
+ </item>
+ <item>
+ <p>
+ Priority elevation of terminating processes did not work
+ which could cause execution of such processes to be
+ delayed.</p>
+ <p>
+ Own Id: OTP-18175 Aux Id: PR-6142 </p>
+ </item>
+ <item>
+ <p>
+ An unlink operation made by a process that terminated
+ before the unlink operation completed, i.e., before it
+ had received an unlink-ack signal from the linked
+ process, caused an exit signal to erroneously be sent
+ from the terminating process to the process being
+ unlinked. This exit signal would most often be ignored by
+ the receiver, but if the receiver of the exit signal
+ concurrently set up a new link, it could receive the exit
+ signal with the actual exit reason of the terminating
+ process instead of a <c>noproc</c> exit reason. It is
+ however very hard to detect that this has happened and
+ has no obvious negative consequences, so it should be
+ considered harmless.</p>
+ <p>
+ A distributed unlink-ack signal received by a terminating
+ process was also not properly removed which could cause a
+ minor memory leak.</p>
+ <p>
+ Own Id: OTP-18177 Aux Id: PR-6150 </p>
+ </item>
+ <item>
+ <p>
+ The <seemfa
+ marker="erts:erlang#monotonic_time/1"><c>erlang:monotonic_time/1</c></seemfa>,
+ <seemfa
+ marker="erts:erlang#system_time/1"><c>erlang:system_time/1</c></seemfa>,
+ <seemfa
+ marker="erts:erlang#time_offset/1"><c>erlang:time_offset/1</c></seemfa>,
+ and <seemfa
+ marker="kernel:os#system_time/1"><c>os:system_time/1</c></seemfa>
+ BIFs erroneously failed when passed the argument
+ <c>native</c>.</p>
+ <p>
+ Own Id: OTP-18197 Aux Id: GH-6165, PR-6213 </p>
+ </item>
+ <item>
+ <p>
+ Fix writing and reading of more than 2 GB in a single
+ read/write operation on macOS. Before this fix attempting
+ to read/write more than 2GB would result in
+ <c>{error,einval}</c>.</p>
+ <p>
+ Own Id: OTP-18222 Aux Id: PR-6248 GH-6242 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 11.2.2.15</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>Fix faulty distribution encoding of terms with
+ either</p> <list> <item>a fun with bit-string or
+ export-fun in its environment when encoded toward a not
+ yet established (pending) connection</item> <item>or a
+ fun with a binary/bitstring, in its environment,
+ referring to an off-heap binary (larger than 64
+ bytes).</item> </list> <p>The symptom could be failed
+ decoding on the receiving side leading to aborted
+ connection. Fix OTP-18093 is a workaround for theses bugs
+ that makes the VM accepts such faulty encoded funs.</p>
+ <p>The first encoding bug toward pending connection
+ exists only in OTP 23 and 24, but the second one exists
+ also on OTP 25.</p>
+ <p>
+ Own Id: OTP-18104 Aux Id: OTP-18093 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 11.2.2.14</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Accept funs (NEW_FUN_EXT) with incorrectly encoded size
+ field. This is a workaround for a bug (OTP-18104)
+ existing in OTP 23 and 24 that could cause incorrect size
+ fields in certain cases. The emulator does not use the
+ decoded size field, but <c>erl_interface</c> still does
+ and is not helped by this workaround.</p>
+ <p>
+ Own Id: OTP-18093 Aux Id: OTP-18104, PR-5987 </p>
+ </item>
+ <item>
+ <p>
+ The zlib built in to the runtime system has been updated
+ to version 1.2.12. (Note that on most platforms, the
+ platform's own zlib is used.)</p>
+ <p>
+ Own Id: OTP-18123 Aux Id: GH-5994 </p>
+ </item>
+ <item>
+ <p>
+ Fixed emulator crash that could happen during crashdump
+ generation of ETS tables with options <c>ordered_set</c>
+ and <c>{write_concurrency,true}</c>.</p>
+ <p>
+ Own Id: OTP-18144 Aux Id: GH-5981 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 11.2.2.13</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Let EPMD tolerate failure when binding to IPv4/IPv6
+ loopback intefaces in addition to user-supplied addresses
+ via <c>ERL_EPMD_ADDRESS</c> or the <c>-address</c>
+ option. This can happen, for example, if the host system
+ has ipv6 disabled via the disable_ipv6 sysctl.</p>
+ <p>
+ Own Id: OTP-17970 Aux Id: PR-5762 </p>
+ </item>
+ <item>
+ <p>Fixed a rare bug in <c>binary_to_term/1</c>,
+ <c>enif_make_map_from_arrays</c>,
+ <c>erl_drv_send_term</c>, and Erlang distribution that
+ could crash the emulator.</p>
+ <p>
+ Own Id: OTP-18027</p>
+ </item>
+ <item>
+ <p>Fixed a rare race in <c>persistent_term:get/1,2</c>
+ that could cause it to return the value of another
+ key.</p>
+ <p>
+ Own Id: OTP-18065 Aux Id: GH-5908 </p>
+ </item>
+ <item>
+ <p>
+ Fix bug where the process message queue was left in an
+ inconsistent state when changing from on_heap to off_heap
+ message queue data causing the GC to segfault.</p>
+ <p>
+ Own Id: OTP-18075 Aux Id: PR-5927 </p>
+ </item>
+ <item>
+ <p>
+ Fix functions that convert universal to localtime (such
+ as erlang:localtime/0 and
+ erlang:universaltime_to_localtime/1) to fetch the correct
+ localtime if it is changed after the start of the VM.</p>
+ <p>
+ Own Id: OTP-18076 Aux Id: ERIERL-802 PR-5905 </p>
+ </item>
+ <item>
+ <p>
+ Fix memory leak when a process doing a distributed
+ fragmented send is sent an exit signal. Before this fix
+ the receiving node would be left with an incomplete
+ message that would remain until the nodes were
+ disconnected. The bug has existed since Erlang/OTP 21.</p>
+ <p>
+ Own Id: OTP-18077 Aux Id: GH-5876 PR-5892 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 11.2.2.12</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Fix Erlang monotonic time on MacOS. Previously used OS
+ monotonic time primitive on MacOS is buggy and will not
+ be used anymore. It has been replaced with usage of
+ another OS monotonic time primitive that does not appear
+ to be buggy.</p>
+ <p>
+ Own Id: OTP-17998 Aux Id: PR-5825, GH-5554 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 11.2.2.11</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p> By default <c>global</c> does <i>not</i> take any
+ actions to restore a fully connected network when
+ connections are lost due to network issues. This is
+ problematic for all applications expecting a fully
+ connected network to be provided, such as for example
+ <c>mnesia</c>, but also for <c>global</c> itself. A
+ network of overlapping partitions might cause the
+ internal state of <c>global</c> to become inconsistent.
+ Such an inconsistency can remain even after such
+ partitions have been brought together to form a fully
+ connected network again. The effect on other applications
+ that expects that a fully connected network is maintained
+ may vary, but they might misbehave in very subtle hard to
+ detect ways during such a partitioning. </p> <p> In order
+ to prevent such issues, we have introduced a <i>prevent
+ overlapping partitions</i> fix which can be enabled using
+ the <seeapp
+ marker="kernel:kernel_app#prevent_overlapping_partitions"><c>prevent_overlapping_partitions</c></seeapp>
+ <c>kernel(6)</c> parameter. When this fix has been
+ enabled, <c>global</c> will actively disconnect from
+ nodes that reports that they have lost connections to
+ other nodes. This will cause fully connected partitions
+ to form instead of leaving the network in a state with
+ overlapping partitions. Note that this fix <i>has</i> to
+ be enabled on <i>all</i> nodes in the network in order to
+ work properly. Since this quite substantially changes the
+ behavior, this fix is currently disabled by default.
+ Since you might get hard to detect issues without this
+ fix you are, however, <i>strongly</i> advised to enable
+ this fix in order to avoid issues such as the ones
+ described above. As of OTP 25 this fix will become
+ enabled by default. </p>
+ <p>
+ Own Id: OTP-17843 Aux Id: ERIERL-732, PR-5611 </p>
+ </item>
+ <item>
+ <p>
+ Fix memory leak when tracing on running on a process that
+ only handle system tasks or non-message signals (for
+ example process_info requests).</p>
+ <p>
+ Own Id: OTP-17904 Aux Id: ERIERL-757 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Erts 11.2.2.10</title>
<section><title>Fixed Bugs and Malfunctions</title>
@@ -1740,7 +3760,7 @@
simultaneously received signals to that port could cause
a runtime system crash. The effected signals are
<c>link</c>, <c>monitor</c> and <c>demonitor</c>. On OTP
- 22 a similiar race could also cause a memory leak when
+ 22 a similar race could also cause a memory leak when
receiving an <c>unlink</c> signal.</p>
<p>
Own Id: OTP-17642 Aux Id: PR-5248 </p>
@@ -2984,7 +5004,7 @@
<item>
<p>Internally in BEAM, handling of continuation pointers
has been simplified. This change is not user-visible,
- except when examing a process stack in the crashdump
+ except when examining a process stack in the crashdump
viewer. The continuation pointer for a function will now
be stored below the y(0) for that function.</p>
<p>
@@ -3418,6 +5438,104 @@
</section>
+<section><title>Erts 10.7.2.18</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p>
+ Fix bug where the process message queue was left in an
+ inconsistent state when changing from on_heap to off_heap
+ message queue data causing the GC to segfault.</p>
+ <p>
+ Own Id: OTP-18075 Aux Id: PR-5927 </p>
+ </item>
+ <item>
+ <p>
+ Fix functions that convert universal to localtime (such
+ as erlang:localtime/0 and
+ erlang:universaltime_to_localtime/1) to fetch the correct
+ localtime if it is changed after the start of the VM.</p>
+ <p>
+ Own Id: OTP-18076 Aux Id: ERIERL-802 PR-5905 </p>
+ </item>
+ <item>
+ <p>
+ Fix memory leak when a process doing a distributed
+ fragmented send is sent an exit signal. Before this fix
+ the receiving node would be left with an incomplete
+ message that would remain until the nodes were
+ disconnected. The bug has existed since Erlang/OTP 21.</p>
+ <p>
+ Own Id: OTP-18077 Aux Id: GH-5876 PR-5892 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
+<section><title>Erts 10.7.2.17</title>
+
+ <section><title>Fixed Bugs and Malfunctions</title>
+ <list>
+ <item>
+ <p> By default <c>global</c> does <i>not</i> take any
+ actions to restore a fully connected network when
+ connections are lost due to network issues. This is
+ problematic for all applications expecting a fully
+ connected network to be provided, such as for example
+ <c>mnesia</c>, but also for <c>global</c> itself. A
+ network of overlapping partitions might cause the
+ internal state of <c>global</c> to become inconsistent.
+ Such an inconsistency can remain even after such
+ partitions have been brought together to form a fully
+ connected network again. The effect on other applications
+ that expects that a fully connected network is maintained
+ may vary, but they might misbehave in very subtle hard to
+ detect ways during such a partitioning. </p> <p> In order
+ to prevent such issues, we have introduced a <i>prevent
+ overlapping partitions</i> fix which can be enabled using
+ the <c>prevent_overlapping_partitions</c>
+ <c>kernel(6)</c> parameter. When this fix has been
+ enabled, <c>global</c> will actively disconnect from
+ nodes that reports that they have lost connections to
+ other nodes. This will cause fully connected partitions
+ to form instead of leaving the network in a state with
+ overlapping partitions. Note that this fix <i>has</i> to
+ be enabled on <i>all</i> nodes in the network in order to
+ work properly. Since this quite substantially changes the
+ behavior, this fix is currently disabled by default.
+ Since you might get hard to detect issues without this
+ fix you are, however, <i>strongly</i> advised to enable
+ this fix in order to avoid issues such as the ones
+ described above. As of OTP 25 this fix will become
+ enabled by default. </p>
+ <p>
+ Own Id: OTP-17843 Aux Id: ERIERL-732, PR-5611 </p>
+ </item>
+ <item>
+ <p>
+ Fix memory leak when tracing on running on a process that
+ only handle system tasks or non-message signals (for
+ example process_info requests).</p>
+ <p>
+ Own Id: OTP-17904 Aux Id: ERIERL-757 </p>
+ </item>
+ <item>
+ <p>
+ Fix Erlang monotonic time on MacOS. Previously used OS
+ monotonic time primitive on MacOS is buggy and will not
+ be used anymore. It has been replaced with usage of
+ another OS monotonic time primitive that does not appear
+ to be buggy.</p>
+ <p>
+ Own Id: OTP-17998 Aux Id: PR-5825, GH-5554 </p>
+ </item>
+ </list>
+ </section>
+
+</section>
+
<section><title>Erts 10.7.2.16</title>
<section><title>Improvements and New Features</title>
@@ -3514,7 +5632,7 @@
simultaneously received signals to that port could cause
a runtime system crash. The effected signals are
<c>link</c>, <c>monitor</c> and <c>demonitor</c>. On OTP
- 22 a similiar race could also cause a memory leak when
+ 22 a similar race could also cause a memory leak when
receiving an <c>unlink</c> signal.</p>
<p>
Own Id: OTP-17642 Aux Id: PR-5248 </p>
@@ -7854,7 +9972,7 @@
<c>cpu_timestamp</c> in <seemfa
marker="erlang#trace/3">erlang:trace/3</seemfa> to use
it instead of per process CPU time. This makes this
- option useable on such OSs when running multiple
+ option usable on such OSs when running multiple
schedulers.</p>
<p>
Own Id: OTP-15090</p>
@@ -7898,7 +10016,7 @@
</item>
<item>
<p>
- Fix segfault when a process is interally re-scheduled
+ Fix segfault when a process is internally re-scheduled
while being traced for in out events. This bug was
introduced in erts-8.0 (OTP-19.0).</p>
<p>
@@ -8449,7 +10567,7 @@
request signal to the other process and waits for the
result instead of locking the other process and reading
the result directly. In some special cases where no
- conflicts occur, signal order wont be violated, and the
+ conflicts occur, signal order won't be violated, and the
amount of data requested is guaranteed to be small, the
inspected process may be inspected directly.</p>
<p>
@@ -10666,7 +12784,7 @@
<item>
<p>
Add option to make SIGTERM trigger the OS default
- behaviour instead of doing a gracefull shutdown. To
+ behaviour instead of doing a graceful shutdown. To
activate this bahviour the environment variable
ERL_ZZ_SIGTERM_KILL should be set to "true". This option
only works in OTP 19 as OTP 20 will have a different way
@@ -10995,9 +13113,9 @@
<p>
Fix a quite rare bug causing VM crash during code loading
and the use of export funs (fun M:F/A) of not yet loaded
- modules. Requires a very specfic timing of concurrent
+ modules. Requires a very specific timing of concurrent
scheduler threads. Has been seen on ARM but can probably
- also occure on other architectures. Bug has existed since
+ also occurred on other architectures. Bug has existed since
OTP R16.</p>
<p>
Own Id: OTP-14144 Aux Id: seq13242 </p>
@@ -11301,7 +13419,7 @@
</item>
<item>
<p>
- Update build scripts to not make assumtions about where
+ Update build scripts to not make assumptions about where
env, cp and perl are located.</p>
<p>
Own Id: OTP-13800</p>
@@ -13176,7 +15294,7 @@
<p>
Fix global call trace when hipe compiled code call beam
compiled functions. Tracing of beam functions should now
- alway work regardless who the caller is.</p>
+ always work regardless who the caller is.</p>
<p>
Own Id: OTP-11939</p>
</item>
@@ -13552,7 +15670,7 @@
<p>
Development of perfctr in the linux kernel ceased in
2010. The perfctr support code in the Erlang VM is thus
- effectively dead code and therefor removed.</p>
+ effectively dead code and therefore removed.</p>
<p>
Own Id: OTP-12508</p>
</item>
@@ -14197,7 +16315,7 @@
<item>
<p>
Fix two cases of unreachable code caused by false use of
- assigment operators.</p>
+ assignment operators.</p>
<p>
Own Id: OTP-12222</p>
</item>
@@ -15251,11 +17369,11 @@
Characteristics impact: A call to the
<c>garbage_collect/1</c> BIF or the
<c>check_process_code/2</c> BIF will normally take longer
- time to complete while the system as a whole wont be as
+ time to complete while the system as a whole won't be as
much negatively effected by the operation as before. A
call to <c>code:purge/1</c> and <c>code:soft_purge/1</c>
may complete faster or slower depending on the state of
- the system while the system as a whole wont be as much
+ the system while the system as a whole won't be as much
negatively effected by the operation as before.</p>
<p>
Own Id: OTP-11388 Aux Id: OTP-11535, OTP-11648 </p>
@@ -16249,7 +18367,7 @@
system:</p> <list> <item>Reduced memory footprint when
the memory load is unevenly distributed between scheduler
specific allocator instances.</item> <item>Depending on
- the default allocaton strategy used on a specific
+ the default allocation strategy used on a specific
allocator there might or might not be a slight
performance loss.</item> <item>When enabled on the
<c>fix_alloc</c> allocator, a different strategy for
@@ -16531,7 +18649,7 @@
<item>Memory leak when terminating ports</item>
<item>Memory leak when reaching the system limit of
maximum amount of concurrently existing ports</item>
- <item>Crashs due to missing, or late test of bad port
+ <item>Crashes due to missing, or late test of bad port
handle</item> <item>The newly introduced driver API
function <c>erl_drv_busy_msgq_limits()</c> could not be
used by dynamically linked in drivers on Windows</item>
@@ -16542,7 +18660,7 @@
<item>
<p>
Fix <c>{packet,httph}</c> header capitalization for
- unrecognized header fields longer than 20 charachters
+ unrecognized header fields longer than 20 characters
such as <c>Sec-Websocket-Version</c>. The limit is simply
raised from 20 to 50 characters with the hope that valid
headers longer than 50 are not used.</p>
@@ -16740,7 +18858,7 @@
For instance, prefer sbc segments over mbc segments,
caching policy is time-arrow aware, evicting older cached
segments to store newer segments. </p> <p>The default
- number of cachable segment has been increased from five
+ number of cacheable segment has been increased from five
to ten segments. This can be modified, same as before,
with the command line option <c>+MMmcs 5</c></p>
<p>Impact: Increased speed for processing on larger
@@ -16815,8 +18933,8 @@
<item>
<p>
The effect of the deprecated environment variable
- ERL_MAX_PORTS had been removed premeturely. It has now
- been readded. Note that this is still scheduled to be
+ ERL_MAX_PORTS had been removed prematurely. It has now
+ been re-added. Note that this is still scheduled to be
released in R17B.</p>
<p>
Own Id: OTP-10895</p>
@@ -17044,7 +19162,7 @@
port lock as well as truly asynchronous communication
with ports.</item> <item>Optimized lookup of port handles
from drivers.</item> <item>Optimized driver lookup when
- creating ports.</item> <item>Preemptable <seemfa
+ creating ports.</item> <item>Preemptible <seemfa
marker="erts:erlang#ports/0">erlang:ports/0</seemfa>
BIF.</item> <item>Improving responsiveness by bumping
reductions for a process calling a driver callback
@@ -17606,7 +19724,7 @@
</item>
<item>
<p>
- Correct formating in exit error messages</p>
+ Correct formatting in exit error messages</p>
<p>
Ensure displayed sizes are not negative. (Thanks to
Michael Santos)</p>
@@ -17963,7 +20081,7 @@
<section><title>Fixed Bugs and Malfunctions</title>
<list>
<item>
- <p><c>erlang:system_profile</c> errorneous profiled the
+ <p><c>erlang:system_profile</c> erroneous profiled the
profiler process when observing runnable processes. This
has been corrected. </p>
<p>
@@ -18044,7 +20162,7 @@
and async threads operations when you exit the emulator,
you use erlang:halt/2 with an integer first argument and
an option list containing {flush,false} as the second
- argument. Note that now is flushing not dependant of the
+ argument. Note that now is flushing not dependent of the
exit code, and you cannot only flush async threads
operations which we deemed as a strange behaviour anyway.
</p>
@@ -20355,7 +22473,7 @@
<p>
<c>epmd</c> used to generate a message to the syslog when
it started up, which could be annoying. This has been
- changed to only generate the message if the debug swith
+ changed to only generate the message if the debug switch
is given. (Thanks to Michael Santos.)</p>
<p>
Own Id: OTP-8775</p>
@@ -20531,7 +22649,7 @@
<item>
<p>
Extreme combinations of register/unregister in a highly
- parallell SMP application could crash the VM. The error
+ parallel SMP application could crash the VM. The error
is corrected.</p>
<p>
Own Id: OTP-8663</p>
@@ -20775,7 +22893,7 @@
<item>
<p>
Support for using gcc's built-in functions for atomic
- memory access has been added. This functionallity will be
+ memory access has been added. This functionality will be
used if available and no other native atomic
implementation in ERTS is available.</p>
<p>
@@ -21256,7 +23374,7 @@
GC. See the documentation for <c>spawn_opt/2-5</c>,
<c>erlang:system_info/1</c>, <c>erlang:system_flag/2</c>,
<c>process_flag/2-3</c>, <c>erlang:trace/3</c>, and the
- documenation for <c>erl</c> for the new command line
+ documentation for <c>erl</c> for the new command line
options <c>+hms</c> and <c>+hmbs</c>.</p>
<p>
Own Id: OTP-8370</p>
@@ -21286,7 +23404,7 @@
app-vsn/ebin/mod.beam file, the file info for the app-vsn
and app-vsn/ebin directories are faked using the file
info from the archive file as origin. The virtual
- direcories can also be listed. For short, the top
+ directories can also be listed. For short, the top
directories are virtual if they does not exist.</p>
<p>
Own Id: OTP-8387</p>
@@ -21709,7 +23827,7 @@
</item>
<item>
<p>
- The pthread rwlock implemention on Linux could cause
+ The pthread rwlock implementation on Linux could cause
starvation of writers. We, therefore, now use our own
rwlock implementation on Linux.</p>
<p>
@@ -22795,7 +24913,7 @@
</item>
<item>
<p>
- Floating point arithmetics in drivers could cause a
+ Floating point arithmetic in drivers could cause a
runtime system crash and/or unexpected results on runtime
systems with floating point exceptions enabled. Floating
point exceptions are disabled unless explicitly enabled
@@ -22807,7 +24925,7 @@
<p>
A bug when many sockets got signalled simultaneously
causing the emulator to panic with the message
- "Inconsistent, why isnt io reported?" is now corrected.</p>
+ "Inconsistent, why isn't io reported?" is now corrected.</p>
<p>
Own Id: OTP-7420</p>
</item>
@@ -23265,7 +25383,7 @@
<list>
<item>
<p>
- Floating point arithmetics in drivers can cause a runtime
+ Floating point arithmetic in drivers can cause a runtime
system crash and/or unexpected results on runtime systems
with floating point exceptions enabled. Floating point
exceptions are disabled unless explicitly enabled or if
@@ -23591,7 +25709,7 @@
<list>
<item>
<p>
- Floating point arithmetics in drivers can cause a runtime
+ Floating point arithmetic in drivers can cause a runtime
system crash on runtime systems with floating point
exceptions enabled. Floating point exceptions are
disabled unless explicitly enabled or if hipe is enabled.</p>
@@ -24643,7 +26761,7 @@
<p>Attempting to construct a binary longer than 536870911
bytes will now fail with a <c><![CDATA[system_limit]]></c> exception
(rather than fail in mysterious ways or construct an
- binary with incorrect contents). Similarily, attempting
+ binary with incorrect contents). Similarly, attempting
to match a binary longer than 536870911 bytes will now
fail (instead of producing an incorrect result). This
limitation has been documented in the Efficiency Guide.
diff --git a/erts/doc/src/persistent_term.xml b/erts/doc/src/persistent_term.xml
index 46cb313ff1..c2e967b694 100644
--- a/erts/doc/src/persistent_term.xml
+++ b/erts/doc/src/persistent_term.xml
@@ -4,7 +4,7 @@
<erlref>
<header>
<copyright>
- <year>2018</year><year>2020</year>
+ <year>2018</year><year>2022</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -50,7 +50,7 @@
performance when updating or deleting persistent terms.</p></warning>
<p>Term lookup (using <seemfa
- marker="#get/1"><c>get/1</c></seemfa>), is done in constant time
+ marker="#get/1"><c>get/1</c></seemfa>) is done in constant time
and without taking any locks, and the term is <strong>not</strong>
copied to the heap (as is the case with terms stored in ETS
tables).</p>
@@ -71,7 +71,7 @@
scan of their heaps for the term that has been deleted. While
such scan is relatively light-weight, if there are many
processes, the system can become less responsive until all
- process have scanned their heaps.</p></item>
+ processes have scanned their heaps.</p></item>
<item><p>If the deleted term (or any part of it) is still used
by a process, that process will do a major (fullsweep) garbage
@@ -146,7 +146,7 @@
<p>Updating or deleting a persistent term will trigger a global GC
if the term does not fit in one machine word. Processes will be
scheduled as usual, but all processes will be made runnable at
- once, which will make the system less responsive until all process
+ once, which will make the system less responsive until all processes
have run and scanned their heaps for the deleted terms. One way to
minimize the effects on responsiveness could be to minimize the
number of processes on the node before updating or deleting a
@@ -157,7 +157,7 @@
persistent term could be deleted or updated in the future. If a
process holds a reference to a persistent term when the term is
deleted, the process will be garbage collected and the term copied
- to process.</p>
+ to the process.</p>
<p>Avoid updating or deleting more than one persistent term at a
time. Each deleted term will trigger its own global GC. That