## 1 Kernel Release Notes

This document describes the changes made to the Kernel application.

### 1.1 Kernel 2.10.9

#### 1.1.1 Fixed Bugs and Malfunctions

- 'erl -config sys.config' would fail to start if the sys.config file did not contain any whitespace at all after the dot. (Thanks to Anders Nygren.)
  Own Id: OTP-5543
- A bug regarding tcp sockets which results in hanging `gen_tcp:send/2` has been corrected. To encounter this bug you needed one process that read from a socket, one that wrote more date than the reader read out so the sender got suspended, and then the reader closed the socket. (Reported and diagnosed by Alexey Shchepin.)
  Corrected a bug in the (undocumented and unsupported) option '{packet,http}' for gen_tcp. (Thanks to Claes Wikstrom and Luke Gorrie.)
  Updated the documentation regarding the second argument to `gen_tcp:recv/2`, the Length to receive.
  Own Id: OTP-5582 Aux Id: seq9839

#### 1.1.2 Improvements and New Features

- At startup, the erlang resolver hosts table was used to look up the name of the local (and possibly stand alone) host. This was incorrect. The configured resolver method is now used for this purpose.
  Own Id: OTP-5393
- The erlang:port_info/1 BIF is now documented. Minor corrections of the documentation for erlang:port_info/2.
  Added a note to the documentation of the `math` module that all functions are not available on all platforms.
  Added more information about the '+c' option in the `erl` man page in the erts documentation.
  Own Id: OTP-5555
- The new 'fun M:F/A' construct creates a fun that refers to the latest version of M:F/A. This syntax is meant to replace tuple funs '{M,F}' which have many problems.
  The new type test 'is_function(Fun, A)' (which may be used in guards) test whether Fun is a fun that can be applied with A arguments. (Currently, Fun can also be a tuple fun.)
  Own Id: OTP-5584
- According to the documentation Global implements the equivalent of `register/2`, which returns `badarg` if a process is already registered. As it turns out there is no check in Global if a process is registered under more than one name. If some process is accidently or by design given several names, it is possible that the name registry becomes inconsistent due to the way the resolve function is called when name clashes are discovered (see `register_name/3` in global(3)).
  In OTP R11B Global will not allow the registration of a process under more than one name. To help finding code where `no` will be returned, a Kernel application variable, `global_multi_name_action`, is hereby introduced. Depending on its value (`info`, `warning`, or `error`), messages are to the error logger when Global discovers that some process is given more than one name. The variable only affects the node where it is defined.
  Own Id: OTP-5603

### 1.2 Kernel 2.10.8

#### 1.2.1 Improvements and New Features

- In case of a DNS lookup loop, inet_db:getbyname ends up building an infinite list. This has been fixed.
  Own Id: OTP-5449
- When doing an inet6 name lookup on an IPv4 address it was possible to get an address on IPv4 format back. This has been corrected. Some other minor inconsistencies regarding IPv6 name lookup have also been corrected.
  Own Id: OTP-5576

### 1.3 Kernel 2.10.7

#### 1.3.1 Fixed Bugs and Malfunctions

- Under certain circumstances the `net_kernel` could emit spurious nodedown messages. This bug has been fixed.
  Own Id: OTP-5396
- Removed description of the `keep_zombies` configuration parameter in the `kernel` man page.
  Own Id: OTP-5497

#### 1.3.2 Improvements and New Features

- Eliminated Dialyzer warnings (caused by dead code) in the `init` and `prim_file` modules.
  Own Id: OTP-5496
- inet_config now also checks the environment variable ERL_INETRC for a possible user configuration file. See the ERTS User's Guide for details.
  Own Id: OTP-5512

### 1.4 Kernel 2.10.6

#### 1.4.1 Improvements and New Features

- The c option for the +B flag has been introduced which makes it possible to use Ctrl-C (Ctrl-Break on Windows) to interrupt the shell process rather than to invoke the emulator break handler. All new +B options are also supported on Windows (werl) as of now. Furthermore, Ctrl-C on Windows has now been reserved for copying text (what Ctrl-Ins was used for previously). Ctrl-Break should be used for break handling. Lastly, the documentation of the system flags has been updated.
  Own Id: OTP-5388
- The possibility to start the erlang shell in parallell with the rest of the system was reintroduced for backwards compatibility in stdlib-1.13.1. The flag to be used for this is now called async_shell_start and has been documented. New shells started from the JCL menu are not syncronized with init anymore. This makes it possible to start a new shell (e.g. for debugging purposes) even if the initial shell hasn't come up.
  Own Id: OTP-5406 Aux Id: OTP-5218

### 1.5 Kernel 2.10.5

#### 1.5.1 Fixed Bugs and Malfunctions

- Documentation for erlang:binary_to_float/1 deleted. The BIF itself was removed several releases ago.
  Updated documentation for `apply/2` and `apply/3`.
  Own Id: OTP-5391

#### 1.5.2 Improvements and New Features

- net_kernel:monitor_nodes/2 which takes a flag and, an option list has been added. By use of net_kernel:monitor_nodes/2 one can subscribe for nodeup/nodedown messages with extra information. It is now possible to monitor hidden nodes, and get nodedown reason. See the net_kernel(3) documentation for more information.
  Own Id: OTP-5374

### 1.6 Kernel 2.10.4

#### 1.6.1 Fixed Bugs and Malfunctions

- The application master for an application now terminates the application faster, which reduces the risk for timeouts in other parts of the system
  Own Id: OTP-5363 Aux Id: EABln19084
- A BIF erlang:raise/3 has been added. See the manual for details. It is intended for internal system programming only, advanced error handling.
  Own Id: OTP-5376 Aux Id: OTP-5257

### 1.7 Kernel 2.10.3

#### 1.7.1 Improvements and New Features

- With the -eval flag (`erl -eval Expr`), an arbitrary expression can be evaluated during system initialization. This is documented in init(3).
  Own Id: OTP-5260
- The unsupported and undocumented modules socks5, socks5_auth, socks5_tcp, and socks5_udp have been removed.
  Own Id: OTP-5266

### 1.8 Kernel 2.10.1

#### 1.8.1 Fixed Bugs and Malfunctions

- The pman 'trace shell' functionality was broken as has now been fixed. Furthermore, pman could not correctly find the pid of the active shell if more than one shell process was running on the node. This has also been corrected.
  Own Id: OTP-5191
- The documentation for the `auth:open/1` function which no longer exists has been removed. (Thanks to Miguel Barreiro.)
  Own Id: OTP-5208
- Corrected the `crc32/3` function in the undocumented and unsupported `zlib` module.
  Own Id: OTP-5227

#### 1.8.2 Improvements and New Features

- You can now start Erlang with the -rsh flag which gives you a remote initial shell instead of a local one. Example: erl -sname this_node -rsh other_node@other_host
  Own Id: OTP-5210
- If /etc/hosts specified two hosts with the same IP address (on separate lines), only the last host would be registered by inet_db during inet configuration. This has been corrected now so that both aliases are registered with the same IP address.
  Own Id: OTP-5212 Aux Id: seq7128
- The documentation for BIFs that take I/O lists have been clarified. Those are `list_to_binary/1`, `port_command/2`, `port_control/3`.
  Documentation for all `is_*` BIFs (such as `is_atom/1`) has been added.
  Removed the documentation for `erlang:float_to_binary/2` which was removed from the run-time system several releases ago.
  Own Id: OTP-5222

### 1.9 Kernel 2.10

#### 1.9.1 Fixed Bugs and Malfunctions

- Added documentation of configuration parameter `net_setuptime`.
  Own Id: OTP-5117 Aux Id: seq8908

#### 1.9.2 Improvements and New Features

- The `disk_log` module has been slightly changed for the purpose of reducing the risk of memory problems due to corrupt files. The `chunk` commands have been optimized by increasing the chunk size from 8 kilobytes to 64 kilobytes.
  Own Id: OTP-4530 Aux Id: seq7646
- The code server used prim_file for its file operations. This made it impossible to load code from a boot server. Now the code server uses erl_prim_loader for these operations instead.
  Own Id: OTP-4819 Aux Id: OTP-4802, OTP-4846
- New functions - rpc:call/5 and rpc:block_call/5. They have a timeout argument! See the documentation for details.
  Own Id: OTP-4849 Aux Id: seq8250
- A new environment parameter `browser_cmd` has been introduced which defines how to display help text (HTML files).
  Own Id: OTP-4852
- The system configuration file `sys.config` can now contain names of other configuration files as well as application configuration data.
  Thus, it is now possible to have several configuration files in connection with release handling. See `config(4)` and OTP Design Principles for more information.
  Own Id: OTP-4867 Aux Id: OTP-1968
- It is now possible to compile files with erlc without getting a lot of (for compilation) unneccessary code loaded and executed (like distribution, inet config, etc). erlc now also calls erl with `-boot start_clean` (so that sasl is not started even if `start_sasl` is default boot script).
  Own Id: OTP-4878
- Disk logs can now be opened or closed in parallel. In particular, if some log is being repaired, other logs can still be opened or closed.
  Own Id: OTP-4913
- Native lookup (system calls) is now default resolver method on all platforms. Also the user inet configuration method has changed so that a kernel variable, inetrc, should now be used to specify the name of the user inet config file (if it exists). This is all documented in the ERTS User's Guide.
  *** POTENTIAL INCOMPATIBILITY ***
  Own Id: OTP-4983
- Previously missing documentation of erlang:system_info/1 and erlang:system_flag/2 have been added.
  Own Id: OTP-5038 Aux Id: seq8708

### 1.10 Kernel 2.9.6.8

#### 1.10.1 Improvements and New Features

- The code server now caches .app files as well as .beam files. Application controller calls the function code:where_is_file/1 to locate the cached .app file so that file:consult/1 may be used instead of file:path_consult/2 to read the file. This is much more efficient.
  Own Id: OTP-5097 Aux Id: seq8956

### 1.11 Kernel 2.9.6.7

#### 1.11.1 Fixed Bugs and Malfunctions

- Improved setup of connection between nodes to avoid that some nodes get lower priority (and thus times out) when many nodes are connected simultaneously.
  Own Id: OTP-5116 Aux Id: seq8908
- There is now a packet size limit option for `gen_tcp` sockets. See the manual for `inet:setopts/2`.
  The ASN.1 BER packet decoding for `gen_tcp` sockets can now decode indefinite length packets.
  Own Id: OTP-5128

### 1.12 Kernel 2.9.6.6

#### 1.12.1 Fixed Bugs and Malfunctions

- A helper for global would terminate if it received unknown types of messages, causing global to terminate too. Changed so that the helper process logs and ignore strange messages.
  Own Id: OTP-5078 Aux Id: seq_8839

#### 1.12.2 Improvements and New Features

- The ability to set system wide options for TCP sockets is added through the kernel application variables inet_default_listen_options and inet_default_connect_options, see the inet manual page for details.
  Own Id: OTP-5080

### 1.13 Kernel 2.9.6.5

#### 1.13.1 Improvements and New Features

- Fixed error that made code server crash if invalid directories were added to the path.
  Own Id: OTP-5070 Aux Id: OTP-5060, EABln14115

### 1.14 Kernel 2.9.6.4

#### 1.14.1 Improvements and New Features

- Speed improvements in code:add_path(s)[az]/1 when the cache is activated.
  Own Id: OTP-5060 Aux Id: seq8315, EABln14115

### 1.15 Kernel 2.9.6.2

#### 1.15.1 Improvements and New Features

- Remote spawn on a nonreachable node now gives warning instead of error in the error_log.
  Own Id: OTP-5030 Aux Id: seq8663]

### 1.16 Kernel 2.9.6.1

#### 1.16.1 Improvements and New Features

- An error that made the code server ignore version numbers on lib directories has been corrected.
  Own Id: OTP-5020

### 1.17 Kernel 2.9.5

#### 1.17.1 Improvements and New Features

- A possibility to make distribution messages be qued up during running of erlang code, so that larger packages is sent over the network is added.
  Own Id: OTP-4916
- When code loading failed it was impossible to know exactly what caused it, only {undef,[{M,F,A}|...]} would be reported. Now the primitive loader lets the error_logger print an error report if a file operation fails. All file errors except enoent and enotdir are reported this way.
  Own Id: OTP-4925 Aux Id: OTP-4952

### 1.18 Kernel 2.9.4

#### 1.18.1 Fixed Bugs and Malfunctions

- Bugs have been fixed in the `disk_log` module: if `reopen` failed to rename a file, a message could erroneously be sent to the client; if requests were queued while a log was blocked, no replies were sent to the blocked processes should the log be closed.
  Own Id: OTP-4880 Aux Id: seq7902
- In rare cases, the global name registration could hang during simultaneous startup of several nodes, due to a cyclic deadlock in the `global:loop_the_locker` processes.
  Own Id: OTP-4902 Aux Id: seq8275

#### 1.18.2 Improvements and New Features

- The kernel variable net_setuptime can now be defined in fractions of seconds (using a floating point number)
  Own Id: OTP-4915

### 1.19 Kernel 2.9.3

#### 1.19.1 Fixed Bugs and Malfunctions

- The driver for dynamically linked in drivers has been fixed to delete loaded drivers when its erlang server dies. The erlang server has also been updated to improve the start-on-demand behaviour.
  Own Id: OTP-4876 Aux Id: OTP-4855 seq8272

#### 1.19.2 Improvements and New Features

- Starting Erlang with the +Bi flag (to ignore ^C), now also disables the quit ('q') option in the JCL menu.
  Own Id: OTP-4897
- A stdlib application variable, `shell_esc`, has been introduced that controls the behaviour of ^G. If `shell_esc` is set to `abort`, ^G restarts the shell. If set to `jcl`, ^G invokes the JCL menu. The latter is default.
  Own Id: OTP-4898 Aux Id: OTP-4897

### 1.20 Kernel 2.9.2

#### 1.20.1 Fixed Bugs and Malfunctions

- The boot server had become broken. Now it works again.
  Own Id: OTP-4846 Aux Id: OTP-4802, OTP-4819
- When loading a dynamically linked in driver through erl_ddll, the server ddll_server that held the port for the driver handling shared libraries got the group leader of the invoking application. Later, when the application was terminated, it killed all processes in its group, also the ddll_server, so the driver still had some shared libraries loaded. Finally, when the ddll_server was restarted it assumed that all shared libraries its driver knew of was statically linked, so the dynamically linked in drivers that was loaded when ddll_server was killed could neither be loaded nor unloaded. This bug has now been fixed by setting the group leader of ddll_server to something harmless and more eternal, and by unloading all remaining dynamically linked in drivers when ddll_server starts. A race condition when starting ddll_server has also been fixed.
  Own Id: OTP-4855 Aux Id: OTP-4876 seq8272

### 1.21 Kernel 2.9.1

#### 1.21.1 Fixed Bugs and Malfunctions

- When the emulator was started with command line arguments -run or -s and the started code did an uncatched erlang:throw/1, the emulator ignored the throw which is rather strange. Now the init process exits with nocatch as expected.
  Own Id: OTP-4788 Aux Id: seq8129
- The code server could hang if invoked early in the startup. For example if the emulator was started with "-s file eval Filename" and Filename contained a call to code:add_patha/1 the code server accidentally tried to execute code in an unloaded module from inside the code that loaded a module - hence hangup. This bug has now been fixed.
  Note! Starting erlang through code loading from a remote erlang boot server will not work after this patch. It will be fixed in a later patch. Rumours has it that remote boot server code loading did not work before this patch either. It is not a commonly used feature.
  *** POTENTIAL INCOMPATIBILITY ***
  Own Id: OTP-4802 Aux Id: seq8314

Copyright © 1991-2005 Ericsson AB