## ERTS 5.4

### Fixed Bugs and Malfunctions

The BIF is_record(Record,RecordTag) has been added to the run-time system. It checks that Record is a tuple whose first element is the atom RecordTag. No check is made of the size of the tuple (because the run-time system doesn't know anything about records).

Note that normally the compiler translates calls to is_record/2 to code that also verify the size of the tuple, in addition to verifying the first element. The BIF version will be used is_record/2 is applied or if the second argument is not a literal atom (e.g. a variable or another term type, in which case the BIF will generate a badarg exception).

Own Id: OTP-4812

Guards of mach specifications are corrected to resemble the semantics of guards in real code more closely. The implementation now corresponds to the documentation in ERTS User's Guide. The following things are corrected:

Guard semantics was wrong when it came to logical operators and exceptions. {'or',{'is_integer','$1'},{'or','$1','$1'}} evaluated to true with '$1' bound to an integer. Unary + and - was not implemented. Calling operators as Bif's was not supported by ets/dbg:fun2ms (erlang:'or'(A,B) etc). Old typetests (like integer(X) instead of is_integer(X)) was not supported by ets/dbg:fun2ms. Semicolon (;) in guards was not supported by ets/dbg:fun2ms.

*** POTENTIAL INCOMPATIBILITY ***

Own Id: OTP-4927

A potential initialization failure when using threads and elib_malloc has been removed.

Own Id: OTP-5125

Several problems in the 64-bit emulator has been corrected. For instance, the emulator could crash while running the Debugger.

Own Id: OTP-5146

The match spec parse transform ms_transform no longer accepts the andalso and orelse constructs in guards for consistency with the standard Erlang language. A future release of Erlang/OTP may allow andalso and orelse in guards.

*** POTENTIAL INCOMPATIBILITY ***

Own Id: OTP-5149

In rare circumstances in a process that has caught exceptions and uses funs, the process would be killed when changing code because the code server would think that the process still held references to the funs.

Own Id: OTP-5153

erlang:system_monitor/2 no longer sends any monitoring messages to the system monitor process from itself. This behavior is more consistent with other trace functionality.

*** POTENTIAL INCOMPATIBILITY ***

Own Id: OTP-5183

### Improvements and New Features

The documentation stated that ets:safe_fixtable/2 could return true or false, that was wrong, it always returns true.

Own Id: OTP-4830

The unary '+' operator has been changed to throw an badarith exception if its argument is not numeric (or fail in a guard). It used its argument unchanged whatever the type. Given the new meaning, unary '+' can now be used to test whether a term is numeric.

*** POTENTIAL INCOMPATIBILITY ***

Own Id: OTP-4928

Process identifiers and port identifiers have been made more unique. Previously 18 bits were used as id in the internal representation of process and port identifiers. Now 28 bits are used.

The maximum limit on the number of concurrently existing processes due to the representation of pids has been increased to 268435456 processes. The same is true for ports. This limit will at least on a 32-bit architecture be impossible to reach due to memory shortage.

NOTE: By default, the ERTS, and the erl_interface, ei, and jinterface libraries are now only guaranteed to be compatible with other Erlang/OTP components from the same release. It is possible to set each component in compatibility mode of an earlier release, though. See the documentation for respective component on how to set it in compatibility mode.

*** POTENTIAL INCOMPATIBILITY ***

Own Id: OTP-4968 Aux Id: OTP-4196

A new internal thread library for the ERTS has been added.

Own Id: OTP-5048

The system's performance could degrade severely if one process held numerous links or monitors. The issue is resolved.

Own Id: OTP-5079

A new function, string:to_integer/1, has been added.

Own Id: OTP-5081 Aux Id: OTP-5136

A new function, string:to_float/1, has been added.

Own Id: OTP-5136 Aux Id: OTP-5081

The exception code for calling a fun with wrong number of arguments has been changed from simply badarity to {badarity,{Fun,Args}}.

*** POTENTIAL INCOMPATIBILITY ***

Own Id: OTP-5139

The long-awaited try...catch construction is included in this release. However, its use in production code is not yet supported as there are several known cases of legal code crashing the compiler. We plan to release a patch to the compiler (including the documentation) and at that time try...catch will be supported.

Own Id: OTP-5150

## ERTS 5.3.6.6

### Fixed Bugs and Malfunctions

A bug that caused an emulator crash when using system monitor of long GC has been fixed.

Own Id: OTP-5123

## ERTS 5.3.6.5

### Fixed Bugs and Malfunctions

erlang:memory(ets) and c:memory(ets) sometimes reported erroneous values. This bug has now been fixed.

Own Id: OTP-5115 Aux Id: seq9063

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

### Improvements and New Features

Port index was unnecessarily incremented by port table size when port table got full. This unnecessary increment has now been removed.

Own Id: OTP-5119

## ERTS 5.3.6.3

### Fixed Bugs and Malfunctions

Resolved a build problem on Mac OS 10.3 ("Panther"). Because of a conflict with the zlib sources included in the Erlang run-time system and the zlib library included in Panther, linking would fail.

Minor optimization on all Unix systems: caching the system name returned from the uname() system call. (Thanks to David N. Welton.)

Own Id: OTP-5069

### 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

## ERTS 5.3.6.2

### Fixed Bugs and Malfunctions

A few portability enhancements for the R9C-1 Open Source release: The installer for Windows can now be built with NSIS 2.0 (as well as with the NSIS 2.0b3). The driver header files updated to allowed drivers to be built which the MinGW compiler on Windows. Minor portability enhancement in io_lib:fread.

Own Id: OTP-4789

Conversion of extremely small floating point numbers in the external format (distribution) could sometimes fail leading to unexpected closing of distribution channels, i.e. generating nodedowns for healthy nodes.

Own Id: OTP-5026 Aux Id: seq8631 EABln12478

## ERTS 5.3.6.1

### Fixed Bugs and Malfunctions

Conversion of extremely small floating point numbers in the external format (distribution) could sometimes fail leading to unexpected closing of distribution channels, i.e. generating nodedowns for healthy nodes.

Own Id: OTP-5026 Aux Id: seq8631 EABln12478

### 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]

### Known Bugs and Problems

Emulator with elib_malloc enabled could hang when many I/O threads were in use.

Own Id: OTP-5028 Aux Id: EABln13041, EABln12253

## ERTS 5.3.6

### Fixed Bugs and Malfunctions

Distributed monitoring in combination with nodes restarting did not behave correctly in rare circumstances.

Own Id: OTP-4914

A module containing code similar to receive after 4.1 could not be loaded.

Own Id: OTP-4963 Aux Id: seq8344

Problems fixed in file:open/2: "/dev/null" can now be opened. Opening a FIFO will now return an error instead of hanging the emulator. The documentation has been updated to point out that file:open/2 returns the error code eisdir when the pathname is not a regular file (the pathname is not necessarily a directory).

Own Id: OTP-4992

### Improvements and New Features

The Solaris kernel poll feature was changed from a compile time option to a runtime option. The kernel poll feature can be enabled, by passing the command-line argument +K true to an emulator (see erl(1)) that have kernel poll support, i.e. an emulator for Solaris 8. By default the kernel poll feature is disabled.

Own Id: OTP-4979 Aux Id: seq8478

Before the Erlang emulator writes an erl_crash.dump file (for any reason), it will close all open files and sockets.

Own Id: OTP-4985 Aux Id: EABln10730, EABln11277, EABln11279

The +c switch has been added to disable time correction in the runtime system, this should be used on systems where one is certain no dramatic wall clock time changes will occur and the time correction algorithm is too costly (namely very fast Linux systems where loads of erlang:now() are executed).

Own Id: OTP-4986

The process_flag/2,3 BIFs now take a flag min_heap_size that allows changing an existing process's minimum heap size. The actual size will only be changed when the next garbage collection occurs.

Own Id: OTP-4991 Aux Id: seq8515, OTP-4987

## ERTS 5.3.4

### 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

## ERTS 5.3.3

### 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

erlang:register/2 does no longer generate an ERROR REPORT to the error logger when the name already is registered. If the name is already registered the process function will crash with {'EXIT',Reason} and that is enough. It is up to the caller to decide if it is an error that the name is already registered.

Own Id: OTP-4892

When using erlang:system_monitor(Pid,{long_gc,Time}), and the GC time exceeded 1 second, it sometimes erroneously showed up as about 4300 seconds. This bug has now been corrected.

Own Id: OTP-4903 Aux Id: seq8379

### 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

## ERTS 5.3.2

### Improvements and New Features

The elib_malloc alternative dynamic memory allocator has been improved to use an address order best fit strategy. The instrumented emulator has been improved to be able to catch memory allocations done by external libraries. The emulator flag +r (stands for "relocate") makes ets updates always result in an object relocation, which significantly lessens the memory fragmentation in certain systems. The erlang:system_info/1 bif can now be called with the argument ets_realloc_moves and will return true if the +r emulator flag is in effect, false otherwise.

Own Id: OTP-4838 Aux Id: seq8156