3
<title>Erts Release Notes</title>
4
<style type="text/css">
6
body { background: white; margin: 3em }
8
body { font-family: Verdana, Arial, Helvetica, sans-serif }
9
h1 h2 h3 h4 { font-family: Verdana, Arial, Helvetica, sans-serif }
11
p li { font-family: Verdana, Arial, Helvetica, sans-serif }
18
<center><h1>Erts Release Notes</h1></center>
21
<!--- ################################################################# --->
26
<!--- ----------------------------------------------------------------- --->
28
<h3>Fixed errors and malfunctions</h3>
33
The start_erl example script passed parameters to erlexec in an
34
incorrect way; this is now corrected.<br>
39
Better error checking of invalid floating point numbers in
45
The '{active,once}' option for <code>inet:setopts/2</code> is now
52
An unneccessary garbage collection at process exit for processes with
53
heap fragments is removed.<br>
54
(Own Id: OTP-4603)<br>
59
The script 'start' now spawns off an run_erl that's completely
60
disconnected from the controlling terminal and that ignores sighup
62
(Own Id: OTP-4612)<br>
67
Some internal memory allocation routines (used in BIFs) would allocate
68
more memory than necessary, especially if the default mininum heap size
69
had been raised. Corrected.<br>
74
A mixup of read buffers in the inet driver could cause unpredictable
75
results when communicating over TCP and for distributed erlang.<br>
76
(Own Id: OTP-4626)<br>
81
Ets tables could show negative sizes in ets:info after a combination of
82
safe_fixtable,delete and insert. The bug is removed.<br>
83
(Own Id: OTP-4690)<br>
88
process_info(Pid, garbage_collection) didn't return information about
89
Pid; instead, it returned information about the calling process. This
90
bug has now been corrected.<br>
95
Repeated process_flag(Pid, save_calls, X) calls could cause
96
erlang:memory() (and other memory information bifs) to return erroneous
97
information. This bug has now been corrected.<br>
98
(Own Id: OTP-4731)<br>
103
ets:memory on set datatype could show wrong result after multiple
104
inserts with same key. The error occurs after applying patch erl_487.
105
The error is now corrected.<br>
106
(Own Id: OTP-4756)<br>
107
(Aux Id: OTP-4690, seq8001)<p>
113
<!--- ----------------------------------------------------------------- --->
115
<h3>Improvements and new features</h3>
120
Support for the HW watchdog on the CP_blade board (PPC_LINUX)<br>
121
(Own Id: OTP-4520)<p>
125
Support for zombies has been removed. <code>erlang:system_flag/2</code>
126
will no longer accept the <code>keep_zombies</code> argument.
127
<code>process_info/2</code> will no longer accept the <code>exit</code>
128
option (which was used to retrieve the exit reason for a zombie
130
(*** POTENTIAL INCOMPATIBILITY ***)<br>
131
(Own Id: OTP-4523)<p>
135
The BIF erlang:hibernate/3 allows a process to shrink its memory
136
consumption while waiting for messages.<br>
137
(Own Id: OTP-4727)<p>
141
A number of new memory allocators have been introduced in order to
142
further reduce the memory consumption of the emulator. In order to
143
resemble the Erlang/OTP R9B system, most of these allocators are
144
disabled by default in the Erlang/OTP R9C release. By starting the
145
emulator with the command-line argument "<code>+Mea r10b</code>", the
146
emulator will use the default configuration we currently expect the
147
Erlang/OTP R10B emulator to use. See the <code>erts_alloc(3)</code>
148
documentation for further information. <br><br> Also new functionality for
149
inspection of memory usage has been introduced. See the
150
<code>instrument(3)</code>, <code>erlang:system_info/1</code>, and
151
<code>erts_alloc(3)</code> documentation for further information. <br><br>
152
<em>NOTE:</em> Some system flags (+ command line arguments passed to
153
erl) have been changed. The <code>+m</code>, <code>+t</code>, and
154
<code>+T</code> flags have been changed to, respectively,
155
<code>+MYm</code>, <code>+MYtt</code>, and <code>+MYtp</code>. The
156
<code>+d</code>, and <code>+S*</code> flags have been removed. See the
157
<code>erts_alloc(3)</code>, and the <code>erl(1)</code> documentation
158
for further information.<br>
159
(*** POTENTIAL INCOMPATIBILITY ***)<br>
160
(Own Id: OTP-4534)<br>
161
(Aux Id: OTP-4761)<p>
165
A way to make ets:update_counter wrap at certain values is now
166
available. See the documentation for details.<br>
167
(Own Id: OTP-4546)<br>
168
(Aux Id: seq4605 (body9066))<p>
172
The maximum number of ports can now be changed to an arbitrary value
173
using the environment variable ERL_MAX_PORTS on windows, corresponding
174
to the behaviour on other operating systems. The maximum number of
175
simultaneously open i.e. sockets or port programs is now only limited
176
by operating system imposed limits.<br>
177
(Own Id: OTP-4578)<p>
181
The beam files contain information about the source filenames unless
183
(*** POTENTIAL INCOMPATIBILITY ***)<br>
184
(Own Id: OTP-4611)<br>
189
A method of getting notifications of long garbage collections, large
190
heaps and suspended processes due to busy ports is now available. See
191
the documentation of erlang:system_monitor/0..2.<br>
192
(Own Id: OTP-4627)<br>
197
erlang:memory/0 and erlang:memory/1 have been added.
198
erlang:memory/[0,1] return the same type of information as
199
c:memory/[0,1] previously did. The erlang:memory/[0,1] functions
200
operate in constant time. c:memory/[0,1] now use erlang:memory/[0,1]
201
and do therefore now also operate in constant time (which they
202
previously did not). <br> erlang:memory/[0,1] return more accurate
203
information than c:memory/[0,1] previously did. <br> For more
204
information about erlang:memory/[0,1] see the erlang(3) man page.<br>
205
(Own Id: OTP-4637)<p>
209
A new class of error messages "warnings" are added. Warnings can be
210
mapped to either error reports (the default), Info reports or a new
211
class of reports, namely "warning reports". Non severe errors in OTP
212
will be reported as warnings instead of forcing error reports.<br>
213
(Own Id: OTP-4638)<br>
218
The <code>gen_tcp:shutdown/2</code> function has been added. To handle
219
shutdown from the other side, the option <code>{exit_on_close,
220
true|false}</code> has been added to the <code>inet:setops/2</code>
222
(Own Id: OTP-4664)<p>
226
To give applications better control of conversion of local time to UTC
227
with respect to daylight saving time, there are two new functions:
228
erlang:localtime_to_universaltime/2 and
229
calendar:local_time_to_uinversal_time_dst/1. See the documentation for
231
(Own Id: OTP-4667)<br>
236
In order to conform to the Erlang specification, comparison between two
237
pids was changed in the R9B release. This change did however break a
238
deadlock- prevention algorithm used by mnesia during release upgrade.
239
Therefore, comparison between two pids has been changed back so that
240
R9B nodes are compatible with Erlang nodes running pre-R9 releases.
241
<br> Pre-R9 comparison between two pids which now is used again: If t1
242
and t2 are both pids, t1 will precede t2 if and only if either * the
243
node local id of t1 precedes the node local id of t2, or * the node
244
local ids of t1 and t2 are equal, and node(t1) precedes node(t2), or *
245
the node local ids of t1 and t2 are equal, and also node(t1) and
246
node(t2) are equal, and node(t1) was created before node(t2). <br> The
247
node local id consist of two integers; serial which is most
248
significant, and number. <br> The Erlang specification states: If t1
249
and t2 are both refs, both PIDs, or both ports, then t1 precedes t2 if
250
and only if either * node(t1) precedes node(t2), or * node(t1) equals
251
node(t2) and t1 was created before t2. <br> Note that comparisons
252
between two refs, or two ports will still conform to the Erlang
254
(*** POTENTIAL INCOMPATIBILITY ***)<br>
255
(Own Id: OTP-4715)<br>
256
(Aux Id: OTP-4511, OTP-4512)<p>
260
The <code>erlang:fun_info/2</code> function will now return the name of
261
the local function that implements the fun. Also, the
262
<code>arity</code> information returned has now been documented.<br>
263
(Own Id: OTP-4719)<br>
264
(Aux Id: OTP-4704)<p>
268
<p>A http state bug in inet_drv (affecting gen_tcp) has been fixed.
269
Patch from Claes Wikstr�m. <p>A bug in defining max number of ports has
270
been fixed. Patch from Claes Wikstr�m. <p>A bug in erlang:port_call/3
271
when calling a driver with a NULL driver struct ->call field has been
272
fixed. Patch from Luke Gorrie. <p>There is a new function
273
file:script/1,2 that does the same as file:eval/1 but gives a return
274
value. For completness, file:path_script/2,3, file:eval/2 and
275
file:path_eval/3 are also added. Suggestion from Ulf Wiger. See the
276
documentation for details. <p><code>erlang:trace/3</code> did no clear
277
trace flags on processes that were exiting. This bug has now been
278
fixed. <p>The gen_udp options <code>add_membership</code> and
279
<code>drop_membership</code> are now allowed. Patch from Vance Shipley.
280
<p><code>gen_udp:open/1,2</code> with service name instead of port
281
number now works. Patch from carlos@lfcia.org. <p>An unjustified
282
compiler warning when using an explicit space character as pad
283
character to <code>io:format/2</code> and similar has been removed.
284
<p>If an illegal node name is used to start a node, now
285
<code>net_kernel</code> fails noisily instead of just letting the node
286
start in non-distributed mode. <p>Now
287
<code>gen_server:format_status/2</code> also works with non-registered
288
processes. <p>There are two new functions
289
<code>erlang:list_to_integer/2</code> and
290
<code>erlang:integer_to_list/2</code> that takes a number base
291
argument. See the documentataion for details. <p>New format characters
292
for <code>io:format/2</code> and similar are ~b, ~B, ~x, ~X, ~+ and ~#.
293
See the documentaion for details. <p>New format characters for
294
<code>io:fread/2</code> and similar are ~u, ~- and ~#. See the
295
documentation for details. <p>The token scanner <code>erl_scan</code>
296
has been rewritten to become twice as fast as before. Now, incomplete
297
any-base numbers such as "16#" are regarded as errors instead of as
298
zero. The allowed base number range has been extended to 2..36 instead
299
of previously 2..16. <p>There is a new function
300
<code>lists:split/2</code>. See the documentation. <p>For everyone that
301
has written their own function to calculate the time difference between
302
two <code>now()</code> calls there is now
303
<code>timer:now_diff/2</code>. See the documentation.<br>
304
(Own Id: OTP-4747)<p>
310
<!--- ################################################################# --->
315
<!--- ----------------------------------------------------------------- --->
317
<h3>Fixed errors and malfunctions</h3>
322
Bit syntax matching in the shell used to allow expressions for sizes;
323
this is now disallowed just as it is in compiled code.<br>
324
(Own Id: OTP-3781)<br>
325
(Aux Id: Seq 5004)<p>
329
spawn_opt/4 used 0 as default value for fullsweep_after instead of the
330
default value used by spawn/3, and spawn_link/3. This caused all
331
processes spawned by spawn_opt/4 (e.g. all gen_servers) to allways use
332
fullsweep if the fullsweep_after option wasn't explicitly set.
333
spawn_opt/4 has now been changed to use the same default value as
334
spawn/3, and spawn_link/3.<br>
335
(*** POTENTIAL INCOMPATIBILITY ***)<br>
336
(Own Id: OTP-4179)<p>
340
The spawn bifs didn't fail with badarg as they should if the argument
341
list wasn't a list; instead, the spawned process immediately exited.
342
All spawn BIFs now fail with badarg if they are passed a bad argument
343
as argument list. <br> spawn BIFs which take funs as arguments and
344
remote spawn BIFs could fail with other errors than badarg when passed
345
bad arguments. All spawn BIFs now fail with badarg when they fail due
346
to bad arguments.<br>
347
(Own Id: OTP-4185)<p>
351
Negative field sizes in construction of binaries using the bit syntax
352
would crash the emulator. Corrected.<br>
353
(Own Id: OTP-4301)<p>
357
System flags (+ command line arguments) taking values weren't handled
358
correctly. If the value and the system flag were separated by
359
whitespace some flags didn't work (e.g. +A 10). If multiple system
360
flags with their corresponding values were passed, and the flags and
361
the values were separated by whitespace, all of these flags were
362
replaced by the last one passed. These bugs have now been corrected.<br>
363
(Own Id: OTP-4312)<br>
364
(Aux Id: OTP-4267, OTP-4313, OTP-4314)<p>
368
The emulator could deadlock on vfork() due to operations performed in
369
the child process before exec() (only observed on multi-processor
370
machines). This bug has now been fixed.<br>
371
(Own Id: OTP-4389)<br>
376
When running the instrumented emulator and sl_alloc release 1,
377
sl_realloc could fail to preserve all information. This has now been
379
(Own Id: OTP-4419)<br>
380
(Aux Id: OTP-4570)<p>
384
Harmless bug (which caused compilation warnings on some platforms)
385
fixed in sl_alloc (release 2)<br>
386
(Own Id: OTP-4420)<p>
390
Documentation of obsolete system flag +s removed<br>
391
(Own Id: OTP-4421)<p>
395
A bug in <code>file</code> that failed to flush write buffers after
396
write errors, for example device full, and caused subsequent writes
397
(after repositioning to a still writable position in the file) to write
398
invalid data, has been corrected.<br>
399
(Own Id: OTP-4505)<br>
400
(Aux Id: OTP-4500)<p>
404
<p>A bug that causes <code>inet_drv.c</code> not to free prebound
405
sockets has been corrected. <p>A bug that caused
406
<code>prim_inet:getiflist/1</code> to miss some interfaces has been
408
(Own Id: OTP-4508)<p>
412
A bug in the emulator that caused a memory leak if there had been more
413
than 1024 ports open, and a port driver called <code>driver_exit</code>
414
(A link from process to port was lost), has been corrected.<br>
415
(Own Id: OTP-4509)<p>
419
A bug that caused a segfault in the emulator when decoding a bad
420
distribution message has been corrected.<br>
421
(Own Id: OTP-4510)<p>
427
<!--- ----------------------------------------------------------------- --->
429
<h3>Improvements and new features</h3>
434
The previous hard system limit of 255 known remote nodes has been
435
removed. With the exception of node name atoms, all data regarding
436
remote nodes are now garbage collected.<br>
437
(Own Id: OTP-4196)<p>
441
sl_alloc release 2 has been introduced in the emulator, see the
442
sl_alloc(3) man page for more information.<br>
443
(Own Id: OTP-4267)<br>
444
(Aux Id: seq7276, OTP-4312, OTP-4313, OTP-4314)<p>
448
The format of the monitor messages has been changed. The
449
<code>Object</code> field in the <code>{'DOWN', MonitorReference, Type,
450
Object, Info}</code> messages is now always on the form
451
<code>{RegisteredName, NodeName}</code> when
452
<code>erlang:monitor/2</code> has been called with a registered name
454
(*** POTENTIAL INCOMPATIBILITY ***)<br>
455
(Own Id: OTP-4311)<br>
460
More memory block types (most of the existing ones) are now identified
461
by the instrumented emulator.<br>
462
(Own Id: OTP-4313)<br>
463
(Aux Id: OTP-4267, OTP-4312, OTP-4314)<p>
467
Memory blocks in the emulator that are guaranteed never to be removed
468
are placed in a special block at the beginning of the emulators heap
469
segment if there are space left in it. This special block has been
470
called the definite alloc block. The size of the definite alloc block
471
can be set with the +d system flag (see the erl(1) manpage) (default
472
size is 2 Mb). <br> The tuple {definite_alloc, BlockSize, UsedSize}
473
that is part of the list returned from
474
erlang:system_info(allocated_areas) can be used to determine how much
475
that is used of the definite alloc block.<br>
476
(Own Id: OTP-4314)<br>
477
(Aux Id: seq7276, OTP-4267, OTP-4312, OTP-4313)<p>
481
A number of sl_alloc improvements have been made. For example, the
482
block header field have been shrunk, and some useless features have
484
(Own Id: OTP-4343)<br>
485
(Aux Id: OTP-4267)<p>
489
There are now two new trace breakpoint types - meta trace and call
490
count trace. See erlang:trace_pattern/3 and erlang:trace_info/2.<br>
491
(Own Id: OTP-4397)<p>
495
The possibility to use elib_malloc instead of the default (libc) malloc
496
has been added. The +m command line switch is used in order to enable
497
another malloc than the default (see the erl(1) man page). In order to
498
enable elib_malloc use "+m elib".<br>
499
(Own Id: OTP-4398)<br>
504
There is a new portable hash function, <code>erlang:phash2</code>, that
505
distributes small integers better than <code>erlang:phash</code>, and
506
is faster for bignums and binaries.<br>
507
(Own Id: OTP-4399)<p>
511
The endianess specification 'native' has been added to the bit syntax.
512
It will resolve to either big or little endian at load time. It is
513
specially useful for communcating with linked-in drivers.<br>
514
(Own Id: OTP-4458)<p>
518
The control() routine in a driver called for a port that is set in
519
binary mode (using set_port_control_flags()), is now allowed to return
520
a NULL pointer instead of a pointer to a binary. A NULL pointer will be
521
returned to the caller of port_control/3 as an empty list.<br>
522
(Own Id: OTP-4459)<p>
526
<p> Comparisons between two <code>port</code>s or between two
527
<code>reference</code>s were previously unstable and didn't conform to
528
the Erlang specification. Comparisons between two <code>pid</code>s
529
didn't previously conform to the Erlang specification. The comparison
530
between two <code>pid</code>s, <code>port</code>s, or
531
<code>reference</code>s has therefore been changed and is now stable,
532
and does now conform to the Erlang specification. </p> <p> Cut from the
533
Erlang specification:<br> If <code>t1</code> and <code>t2</code> are
534
both refs, both PIDs, or both ports, then <code>t1</code> precedes
535
<code>t2</code> if and only if either<br> * <code>node(t1)</code>
536
precedes <code>node(t2)</code>, or<br> * <code>node(t1)</code> equals
537
<code>node(t2)</code> and <code>t1</code> was created before
538
<code>t2</code>. </p><br>
539
(*** POTENTIAL INCOMPATIBILITY ***)<br>
540
(Own Id: OTP-4511)<p>
546
There are also release notes for
547
<a href="notes_history.html">older versions</a>.