This document describes the changes made to the Kernel application.
Kernel 2.6.2
Fixed errors and malfunctions
inet_res:nslookup/4
has been made backwards compatible.
Own Id: OTP-3763
Aux Id: Seq 4972- When R6 nodes and unpatched R7 nodes are in the same network,
global:register_name
hangs. This is fixed with a patch to R7. Patched R7 nodes can communicate with unpatched R7 nodes.
Own Id: OTP-3714- A hanging bug in the protocol between dist_ac and application_controller has been fixed. It occurred when dist_ac had stopped an application with {ac_change_application_req,AppName,stop_it} and then tried to start it with {ac_change_application_req, AppName,{takeover,FromNode,RestartType}}.
Own Id: OTP-3773
Aux Id: Seq 4996- If a new application was added using code:replace_path/2, the code:lib_dir/1 function would fail on the new application name. This has been corrected.
Own Id: OTP-3780
Aux Id: Seq 5003- The internal inet_db counter next_id did not keep within the bounds [0, 65535] imposed by DNS query field width. The reply was then not recognized since the reply id was truncated to 16 bits. This bug is now fixed.
Own Id: OTP-3798
Aux Id: Seq 5001- The default receive buffer size for UDP has been restored to 8192 bytes, which it was before R7.
Own Id: OTP-3807
Aux Id: OTP-3797- gen_upd:recv/2,3 now works better. The option combination [binary, {active, false}] was broken.
Own Id: OTP-3823- A bug in efile_drv that randomly caused memory access violation when using file:get_cwd() has been fixed.
Own Id: OTP-3832- gen_tcp:connect/3,4, and gen_udp:send/4 now exits with badarg if an IP address tuple with a field integer value that is is not in the range 0 through 255 is passed as argument. Previously this caused a function clause.
Own Id: OTP-3836
Aux Id: Seq 5091- The function inet:gethostbyname/2,3 sometimes returned {error, timeout} when failing to lookup a name. This has been changed to the more appropriate response {error, nxdomain}.
Own Id: OTP-3883- The function inet:gethostbyname/2,3 now accepts an IP-string as the Name argument for all resolver types. This previously did not work for the built in DNS resolver, nor for the /etc/hosts file resolver.
Own Id: OTP-3886- The native version of the resolver for erlang no longer may crash the system due to external causes like catatonic DNS servers.
Own Id: OTP-3887- When a host machine was misconfigured so that inet:gethostbyname/1 returned an empty hostname for the host on which an erlang node was started, inet_config crashed with a function clause during node start on some platforms. This has now been fixed.
Own Id: OTP-3894
Aux Id: Seq 5127- A close of a tcp socket could be delayed up to 5 seconds after all pending output had been sent. Now the socket is closed immediately after all pending output has been sent.
Own Id: OTP-3963
Aux Id: OTP-3924Improvements and new features
disk_log
handles huge terms better when reading log files usingchunk/2
. Bugs inchunk/2
andchunk_step/3
as well as inwrap_log_reader
have been fixed.
Own Id: OTP-3716- A number of bug fixes and improvements have been done to applications
runtime_tools
,kernel
anderts
:
- A read timeout no longer resets the sequential trace token. This is an incompatibility towards the previous behaviour. Use
seq_trace:set_token([])
to reset the sequential trace token.
seq_trace:get_token/0
andseq_trace:set_token/1
now have compatible token formats.
dbg:trace_port/2
anddbg:trace_client/2,3
now supports trace to and read from a size limited "wrap file set".
dbg:trace_port_control/1
now supports operationget_listen_port
for the ip trace driver.
- New match spec functions
{is_seq_trace}
and{get_seq_trace}
has been added to test and read the sequential trace token in match specs.
- New match spec functions
{get_tcw}
and{set_tcw Value}
that reads and sets a "trace control word" in the node has been added. The "trace control word" is a word in each Erlang node of at least 24 bits. There are also enhancements of BIFs:erlang:system_info(trace_control_word)
anderlang:system_flag(trace_control_word, Value)
for the same purpose.
- A new match spec function
{silent, TrueOrFalse}
for setting a silent call trace flag per process that inhibits call trace messages, both local and global, has been added. The BIFerlang:trace/3
has been extended to recognize the flag 'silent' to start a call trace in silent mode.
- Some bugs in the
dbg
module has been fixed, e.g the 'old_trace_call' flag has been removed from the 'all' flags list, and the dbg server no longer hangs if the supplied tracer fails to start.
- A bug in the emulator that made 'EXIT' messages from a process involved in a sequential call trace get overwritten by the sequential trace token itself has been fixed.
- The documentation regarding the above has been updated. Especially, the fact that the match spec function
{return_trace}
destroys the tail recursiveness of the traced function has been pointed out.
(*** POTENTIAL INCOMPATIBILITY ***)
Own Id: OTP-3747
Aux Id: OTP-3592, OTP-3744- Hidden nodes and hidden global groups have been introduced. This makes it possible to establish hidden connections between Erlang nodes. See
global_group(3)
, anderl(1)
.
Own Id: OTP-3963
Aux Id: OTP-3916Kernel 2.6.1 (R7B)
Fixed errors and malfunctions
- A new better and more portable hash BIF,
erlang:phash/2 , has been introduced. Thedets module will use theerlang:phash/2 for newly created tables. To rebuild an old table and start to use the new hash BIF, give the{repair,force} option todets:open_file/2 . See the documentation.
Own Id: OTP-3397- In OTP R7A, command line arguments could not be longer than 255 characters. This restriction has been removed again, but since the length limit on atoms is enforced more thoroughly than in earlier releases,
init:get_args/0
will fail for such arguments. A new functioninit:get_plain_arguments/0
has been introduced, which returns strings, and should be used instead. The same problem with the command line flag-s
is solved by the introduction of a new command line flag-run
with the same semantics as-s
, except that the user's function is called with a list of strings instead of a list of atoms.
Own Id: OTP-3687Improvements and new features
- On Unix,
os:cmd/1
previously used a dedicated subprocess, which meant that calls toos:cmd/1
were serialized. This is no longer the case. (For R7A users: the solution in R7A was too simple; compatibility with earlier releases has been restored.) The kernel configuration parameterstart_os
has been removed.
(*** POTENTIAL INCOMPATIBILITY ***)
Own Id: OTP-3466
Aux Id: seq4333- A new callback
Mod:prep_stop/1
has been introduced inapplication
, for actions that need to be performed before the children are terminated.
Own Id: OTP-3590
Aux Id: Seq 4578disk_log
:lclose/2
is a new function.
Own Id: OTP-3685- When supplying option {packet, PacketType} to gen_udp:open(Portnum, Options) it now exits with badarg. In previous releases this option was silently ignored, which was too forgiving since UDP datagrams are packets by definition, and hence this option was obsolete. Furthermore, the more exotic PacketType values, e.g. asn1, cdr, sunrm, fcgi, has never been implemented for UDP. Programs that supply this obsolete option to gen_udp:open/2 will probably crash when running on this release.
(*** POTENTIAL INCOMPATIBILITY ***)
Own Id: OTP-3690Kernel 2.6 (R7A)
Known problems
code:is_loaded/1
doesn't type check its arguments.
Own Id: OTP-2607- If more than 1024 bytes of text (more than 256 in release R4) are pasted into the shell, and this text consists of more than one expression sequence (each ending with a period), text after the first 1024 bytes may be lost.
Own Id: OTP-3041Fixed errors and malfunctions
- If an error occurred when accessing a file, the file process died, and further attempts to access the file could cause the caller to hang. Now, it will no longer hang, but return
{error, terminated}
.
Own Id: OTP-1400
Aux Id: OTP-1034, OTP-2400- Using
gen_tcp:send
on a closed socket no longer causes the caller to hang.
Own Id: OTP-2714
Aux Id: seq 1122- A few problems having to do with start phases in the application controller were corrected.
Own Id: OTP-3380
Aux Id: Seq 4166net_adm:names
always returned the empty list. This is now corrected. A similar error was corrected in inet_db.
Own Id: OTP-3432
Aux Id: Seq 4274rpc:multicall
could leave anodedown
message in the caller's message queue under some circumstances. This has been fixed.
Own Id: OTP-3449
Aux Id: Seq 4305- A fix in the
disk_log
module: changing the size of a non-full wrap log could return the erroreinval
.
Own Id: OTP-3484
Aux Id: seq4354, seq4259- After using
erlang:demonitor/1
on a remote process, aDOWN
message would appear anyway if the remote node went down. This has been fixed.
Own Id: OTP-3499
Aux Id: Seq 4393global:register_name
and similar functions could sometimes fail to modify the names consistently on all nodes, if new nodes appeared in the network during the operation.
Own Id: OTP-3552
Aux Id: Seq 4490- If a partly partitioned net is brought together again,
global
could enter deadlock.
Own Id: OTP-3575
Aux Id: OTP-2766- In a net which had been partly partitioned and brought together again, it could happen that the name registry would remain inconsistent indefinitely.
Own Id: OTP-3576- When starting up a configured network, a deadlock could occur, especially if the nodes were much different in speed. This has been fixed.
Own Id: OTP-3625
Aux Id: Seq 4552Improvements and new features
- When several versions of an application existed simultaneously in the lib directory, the code server did not neccessarily pick the latest version of the application case any version number was greater than 9, when in interactive mode (for instance, 1.9 was considered later that 1.10).
Own Id: OTP-2976- Documentation for the function application:get_key/1/2 has been improved.
Own Id: OTP-3379
Aux Id: seq4164- On Unix,
os:cmd/1
previously used a dedicated subprocess, which meant that calls toos:cmd/1
were serialized. This is no longer the case.
(*** POTENTIAL INCOMPATIBILITY ***)
Own Id: OTP-3466
Aux Id: seq4333- The
disk_log
module has been improved as regards distribution. The value returned fromopen/1
when opening a distributed log has been modified. The modification is incompatible with the previously returned value. Attempts to open a distributed log on a node running new code from a node running old code, and vice versa, results in anodedown
error message.info/1
returns two more tags, 'node' and 'distributed'. The new functionlclose/1
closes a log on the current node. The layout of the continuation returned fromchunk{_step}
has been changed, and the new functionchunk_info/1
returns the node where chunks are read from. The new functionaccessible_logs/0
returns the names of disk logs accessible on the current node.
(*** POTENTIAL INCOMPATIBILITY ***)
Own Id: OTP-3531
Aux Id: Seq 4426, Seq 4258- The BIF erlang:monitor(process, Proc) has been extended to accept named processes, local and remote. See the documentation for erlang:monitor/2 and erlang:demonitor/1.
Own Id: OTP-3657- The gen_ family (mostly gen_server and gen_fsm) and rpc has been rewritten to use the new BIF erlang:monitor/2 as much as possible. This should improve performance and remove some possibilities of hanging gen_server calls. In particular, gen_server:multi_call/2..4 and rpc:multi_server_call/2,3 should now never hang, at least not when all nodes are of this release. See also the documentation for gen_server and rpc.
Own Id: OTP-3660- The inet driver (inet_drv, i.e the driver for (TCP&UDP)/IP) and a lot of supporting Erlang code in the application kernel, has been replaced. The new code, courtesy of Tony Rogvall, eliminates one data relay process per socket and thereby gives a throughput boost.
Own Id: OTP-3661- For completeness, a new function rpc:nb_yield/2 has been added. See the documentation.
Own Id: OTP-3662- The
erlang:info/1
anderlang:system_info/1
BIFs have been merged into one. The recommended way to use the combined BIF is by the nameerlang:system_info/1
, buterlang:info/1
will also work.
Own Id: OTP-3669- There is a new os:getenv/0 function that retrieves a list of all (operating system) environment variables.
Own Id: OTP-3670- New socket options for TCP/IP sockets: 'tpkt' and 'line'. See the documentation for inet:setopts/2.
Own Id: OTP-3674- Most of the previously undocumented BIFs in the
erlang
module have been documented. Still undocumented are BIFs which are of no use in applications, for instance the set of BIFs used to implement the distribution protocol. The newly documented BIFs are:
append_element/2
,bump_reductions/1
,display/1
,function_exported/3
,garbage_collect/0,1
,is_builtin/3
,loaded/0
,make_tuple/2
,md5/1
,md5_final/1
,md5_init/1
,md5_update/2
,port_close/1
,port_command/2
,port_connect/2
,port_control/3
,port_to_list/1
,ref_to_list/1
,system_info/1
, andyield/0
.
Own Id: OTP-3675- The new BIF term_to_binary/2 can be used for automatically compressing the external representation of an Erlang term. The binary_to_term/1 BIF in R7 automatically recognises and decompresses such compressed terms.
Own Id: OTP-3676Kernel 2.4.1
Fixed errors and malfunctions
application_controller
could hang if application:stop/1 was called at about the same time as the application terminated.
Own Id: OTP-3351
Aux Id: Seq4092Improvements and new features
- The functions
format_error/1
,change_header/2
andchange_notify/3
have been added to thedisk_log
module.
Own Id: OTP-3297
Aux Id: OTP-3296, OTP-3340- Further changes have been made in the
disk_log
module. Proper error handling has been added. Several bugs have been fixed.
Own Id: OTP-3340
Aux Id: OTP-3297- The BIF
binary_to_term/1
will now ignore any garbage following the encoded term (as it used to do in versions of OTP before R3). The undocumented BIFerlang:old_binary_to_term/1
(which is now equvivalent tobinary_to_term/1
) will be removed in a future release.
Own Id: OTP-3368Kernel 2.4
Known problems
- If an error occurs when accessing a file, the file process dies, and any further attempts to access the file may cause the caller to hang.
Own Id: OTP-1400
Aux Id: OTP-1034code:is_loaded/1
doesn't type check its arguments.
Own Id: OTP-2607- Using
gen_tcp:send
on a closed socket causes the process to hang.
Own Id: OTP-2714
Aux Id: seq 1122- If more than 1024 bytes of text (more than 256 in release R4) are pasted into the shell, and this text consists of more than one expression sequence (each ending with a period), text after the first 1024 bytes may be lost.
Own Id: OTP-3041Fixed errors and malfunctions
- Deadlock occured in global when two nodes reconnect after a connection failure because both nodes tried to set lock on the other nodes in the system.
This is now solved by letting only one of the reconneting nodes set the lock.
Own Id: OTP-3162- A distributed application was not marked as running when it was started. The error occurred on all nodes but the node where the application was actually started, if the application had the permit-flag set to false at boot loading.
Own Id: OTP-3184gen_tcp:send
did return{error,normal}
when the connection was closed by the other end of the socket. This is now corrected so that{error, enotconn}
or possibly{error, econnreset}
is returned.
Own Id: OTP-3224
Aux Id: OTP-2954, OTP-3220, Seq 3804- The functions
file:eval/1
andfile:path_eval/2
now conform with their documentation when evaluation of an expression fails.
Own Id: OTP-3254
Aux Id: OTP-3161Improvements and new features
- New BIFs have been introduced for spawning a process with a Fun:
spawn(Fun)
,spawn(Node, Fun)
, and correspondingspawn_link
, replacing previous undocumented BIFs with the same names.
(*** POTENTIAL INCOMPATIBILITY ***)
Own Id: OTP-3121
Aux Id: OTP-3141- Errors occurring while the
.erlang
file was executed were previously not reported in any way. Now, the first such error is reported using the error logger.
Own Id: OTP-3161
Aux Id: OTP-3254- The option
backtrace
toprocess_info/2
returns the stack backtrace of a process, as a binary (usebinary_to_list
to expand it into a string).
Own Id: OTP-3180
Aux Id: Seq 3600- All kind of trace messages can now be sent to a port instead of to a process (for less performance impact). The
erlang:trace/3
BIF now accept an option to set the tracer process or port. The seq_trace:set_system_tracer/1 (for sequential tracing) function now accepts a port identifier as well as a pid.There are suitable drivers that can receive trace output in the new
runtime_tools
application.
Own Id: OTP-3236- In order to support the new call tracing, several incompatible changes have been made to the trace/3 BIF.
The trace/3 BIF is now longer auto-imported; it must be called as erlang:trace/3 or imported.
The 'bifs' flag is no longer supported. Bifs can be traced as any exported function using the new call tracing (see
erlang:trace_pattern/2
).The 'suspend' flag is no longer supported. Use the new
erlang:suspend_process/1
anderlang:resume_process/1
Bifs instead.The 'call' flag turns on new call tracing for a process. Use the 'old_call_trace' to turn on the old-fashioned call tracing.
There is no longer a restriction that process cannot trace a process that is tracing another processs. Therefore, it is possible to construct a circle of processes that are tracing each other (which is a bad idea beacuase the Erlang machine will probably crasch).
The trace messages from send and receive traces have been changed to make consistent with the other trace messages. Now all trace messages have the pid of the traced process in position 2 and the type of trace in position 3.
If timestamps are enabled, the first element of each trace message tuple will be 'trace_ts'.
The return value is no longer 'true', but the number of processes that matched the process argument. For instance, the return value will be '1' if an explicit Pid argument was given.
(*** INCOMPATIBILITY with R5B01 ***)
Own Id: OTP-3237
Aux Id: OTP-3238- A new kind of call tracing has been added. The new call tracing only support tracing of external function calls, but there is no need to trace-compile the modules to be traced.
The
erlang:trace/3
has been changed and extended to support the new call tracing. It is also possible to set the default tracer and trace flags for all new processes that are or created. There is also a new option to explicitly pass the pid of the tracer process. Also, trace messages can be sent to a port for less performance impact.There are two new Bifs:
erlang:trace_pattern/2
to enable tracing on certain conditions for one or more exported functions or Bifs,erlang:trace_info/2
to retrieve trace information about a process or exported function.
Own Id: OTP-3238
Aux Id: OTP-3237- EXIT codes now contains more information about where the error occured. There used to be only an indication of the current function; now the complete call chain is included in the EXIT code.
There are two new Bifs similar to exit/1, except that they generate information about which in function the fault occurred. The Bifs are
erlang:fault/1
anderlang:fault/2
.
(*** POTENTIAL INCOMPATIBILITY ***)
Own Id: OTP-3239- The
disk_log
module has been improved. The new notification{blocked_log,
Items}
is generated when any of the functionsalog/2
,balog/2
,alog_terms/2
, orbalog_terms/2
is used with a log that is blocked but not queuing. The new notification{format_external,
Items}
is generated whenalog/2
oralog_terms/2
is used with an internal log. The new functioninfo/1
returns information about a disk log. The functionsreopen/2,3
,breopen/3
,truncate/1,2
andbtruncate/2
can be used with wrap logs. Several bugs have been fixed.
Own Id: OTP-3296
Aux Id: OTP-3297, OTP-3308- The
disk_log
module has been changed according to the following. Requests to close a disk log are always granted. The disk log is unblocked if the blocking process closes the disk log. Any other process just closes the log. If a process that is linked to a disk log terminates, this is handled exactly as if the process had closed the log and then terminated. If any other process than the blocking one tries to unblock a log,{error, {not_blocked_by_pid, Name}}
is returned. The exit messages returned by open and reopen have been changed.
(*** POTENTIAL INCOMPATIBILITY ***)
Own Id: OTP-3307
Aux Id: OTP-3308- The
disk_log
module has been slightly changed according to the following.inc_wrap_file/1
sends wrap notices.inc_wrap_file/1
andchange_size/2
return an error message if anything goes wrong, rather than terminating the log.block/1,2
,sync/1
andtruncate
no longer queue requests if the log is blocked withQueueLogRecords
set tofalse
. Files other than internal logs and shorter than 8 bytes are not overwritten when opening an internal log. If the process that has blocked a log tries to update the log, an error message is returned.
(*** POTENTIAL INCOMPATIBILITY ***)
Own Id: OTP-3308
Aux Id: OTP-3296, OTP-3307Kernel 2.2.1
Known problems
- If an error occurs when accessing a file, the file process dies, and any further attempts to access the file may cause the caller to hang.
Own Id: OTP-1400
Aux Id: OTP-1034- Using
gen_tcp:send
on a closed socket causes the process to hang.
Own Id: OTP-2714
Aux Id: seq 1122- If more than 1024 bytes of text (more than 256 in release R4) are pasted into the shell, and this text consists of more than one expression sequence (each ending with a period), text after the first 1024 bytes may be lost.
Own Id: OTP-3041Fixed errors and malfunctions
- global locks do now keep track of all pids that share the same lock, i.e after two set_lock and one del_lock the lock is still set.
Own Id: OTP-1849- Global may have exited if bursty nodeup/nodedowns was received to a node. This is solved now.
Own Id: OTP-2766
Aux Id: otp-2728, otp-2928- Changes of the kernel configuration parameter 'distributed' are now taken care of at release upgrade. Kernel will however not automatically move applications to the nodes with highest priority; this must be done manually after the release upgrade is finished (use application:takeover/2).
Own Id: OTP-2830- If a transient application exited with reason normal application_controller crashed; this malfunction is now corrected.
Own Id: OTP-2955
Aux Id: seq1445- If a system is started and a permanent application has erroneous environment parameters, the system should crash. This is the behaviour now, before the system only printed an error report. The system will only crash if the application is started from a boot script genrated by calling systools:make_script/1/2 If application:start/1/2 is called the behaviour is as before.
Note: affects the result of the systools:make_script/1/2. systools:make_script generates now a call to application:start_boot/2 instead of as prevoiusly a call to application:start/2.
Own Id: OTP-3002- applicaition:get_application(module_name) returned 'undefined' if the module_name was defined as {module_name, Vsn} in the .app-file
Own Id: OTP-3081
Aux Id: Seq 1618- The possible InternalStatus
stopping
was missing in the documentation forinit:get_status/0
.
Own Id: OTP-3096
Aux Id: Seq 1672- when opening an externally formatted disk log the header was not written to the files.
Own Id: OTP-3118- application:permit can now handle also applications which are only loaded (but not started).
Own Id: OTP-3119- When reading a wrap log and for some reason a file was missing an error was given and it was not possible to read further. Now a missing file will result only in an error log message and it is possible to continue reading the log.
Own Id: OTP-3136
Aux Id: OTP-3137- It is now possible to open an existing wrap log without giving the size parameter. The last given values will be used as default values.
Own Id: OTP-3147Improvements and new features
- It is now possible to change the size of an open disk log. For a halt log it is always possible to increase the size, but it is not possible to decrease the size to be less than the current size of the file. For a wrap log it is always possible to increase both the size and number of files. If the max files is decreased the redundant files will be removed next time the log wraps. If the size of the files is decreased the change will not affect the logs already full. If the log size is decreased for instance to save space, the function inc_wrap_log/1 can be used to force the log to wrap.
Own Id: OTP-2999
Aux Id: OTP-2989,OTP-2990,seq 1499- It is possible to force the disk_log to change to next wrap log file by calling the new function disk_log:inc_wrap_log(Log). This makes the current file to be closed and the next index file is opened.
Own Id: OTP-3078
Aux Id: Seq 1607- The undocumented and not recommended BIFs
erlang:spawn/2
anderlang:spawn_link/2
will disappear in OTP R6, to be replaced with a more consistent set of BIFs for spawning processes from funs.
Own Id: OTP-3141
Aux Id: OTP-3121Kernel 2.2
- If an error occurs when accessing a file, the file process dies, and any further attempts to access the file may cause the caller to hang.
Own Id: OTP-1400
Aux Id: OTP-1034code:is_loaded/1
doesn't type check its arguments.
Own Id: OTP-2607- If more than 1024 bytes of text (more than 256 in release R4) are pasted into the shell, and this text consists of more than one expression sequence (each ending with a period), text after the first 1024 bytes may be lost.
Own Id: OTP-3041Fixed errors and malfunctions
net_adm:names
did not always return the correct result when epmd on the own host was called on Windows or Linux. This is now corrected.
Own Id: OTP-2851
Aux Id: OTP-2840- Some BIFs e.g
append
could during certain circumstances consume huge amounts of memory (causing the Erlang node to crash) before the garbage collector was invoked to free the unused memory. This is now corrected.
Own Id: OTP-2865
Aux Id: Seq 1337- When a heart command is set with
heart:set_cmd(Command)
the length is miscalculated which results in 2 garbage characters at the end of the command. This can cause the heart command to fail if the garbage characters are other chars then SPACE or NULL. This is now corrected.
Own Id: OTP-2903
Aux Id: Seq 1372- I thought I already had written the release note for thisx
Own Id: OTP-2911
Aux Id: Seq 1384- Previously
gen_tcp:accept
erroneously could return{error,normal}
. This is now corrected.
Own Id: OTP-2954
Aux Id: Seq 1374, OTP-2904- A request to start a distributed application, which already was started, caused that the application controller hanged. This malfunction is now corrected.
Own Id: OTP-2967
Aux Id: Seq 1474- Two processes starting the same application on the same node at the same time actually started the application twice.
Now the systems keeps track of all the start requests and starts the application only once. The result of the start is returned to all requesters.
Own Id: OTP-2973
Aux Id: Seq 1461- A local application would not start when its permission was set to true if it was initially started with permission set to false.
Own Id: OTP-2974- The error returns from the functions in the
rpc
module were not consistent: if{badrpc, {'EXIT', Reason}}
was reported for remote nodes, only{badrpc, Reason}
was reported for the local node. Now,{badrpc, {'EXIT', Reason}}
is reported in both cases.
(*** POTENTIAL INCOMPATIBILITY ***)
Own Id: OTP-3007
Aux Id: OTP-2875net_adm:localhost/0
is corrected to not append a "." to the hostname if the domain is not set (i.e when the domain is the empty string).
Own Id: OTP-3013
Aux Id: Seq 1533- On Unix, if there were no current working directory for an Erlang node (if another Unix process has deleted the directory), the commands
c:pwd/0
,m/0
, andm/1
would crasch. Thepwd
has been corrected to print "Cannot determine current directory" if there are no current directory, and the other commands do not attempt to convert absolute pathnames to relative pathnames as they usually do.
Own Id: OTP-3015
Aux Id: Seq 1537- When starting the emulator with the
-noshell
switch, a "^R" marker was printed if reading and writing on the console was mixed. This marker is no longer printed.
Own Id: OTP-3085
Aux Id: Seq 1629Improvements and new features
- Functions have been added to the
file
module to handle links. Theread_link_info/1
reads information about a symbolic link, and theread_link/1
function returns what a symbolic link is actually pointing to. Themake_link
function creates a new hard link, and themake_symlink
function creates a new symbolic link.
Own Id: OTP-1385
Aux Id: OTP-3008- It is now possible to reconfigure global groups. The parameter name is changed from node_groups to global_groups.
Own Id: OTP-2497
Aux Id: OTP-1559gen_udp:recv/3
has been added, in analogy withgen_tcp:recv/3
, andgen_udp:recv/[2,3]
are now documented.
Own Id: OTP-2645- Allowed number of files in a wrap log is increased from 255 to 65000.
Own Id: OTP-2748
Aux Id: seq 1204gen_tcp:connect/[3,4]
take the same options asgen_udp:open/[1,2]
, in particular thebinary
option. This is not new in R5, but was left out of the documentation.
Own Id: OTP-2814
Aux Id: Seq 1250- The syntax of Erlang tokens has been extended to allow the use of the full ISO-8859-1 (Latin-1) character set. This is noticeable in the following ways: all the Latin-1 printable characters can be used and are shown without the escape backslash convention; atoms and variables can use all Latin-1 letters.
Own Id: OTP-2985- The disk_log wrote a header every time a log file was opened, now the header is only written once in each file.
Own Id: OTP-3014
Aux Id: Seq 1534- A new open mode,
append
, has been added to thefile:open/2
function.
Own Id: OTP-3067Kernel 2.1.1
Fixed errors and malfunctions
ets:file2tab
which usesdisk_log
now uses theread_only
option todisk_log:open
when it opens the file.
Own Id: OTP-1716
Aux Id: OTP-1765- All applications are now informed of all changed, new and removed configuration parameters at installation of a new release. The new call-back functions is defined as Mod:config_changed(Changed, New, Removed). Where Mod is the module defined in the .app file. Refer to the reference manual application(3).
Own Id: OTP-2012- When killing a shell in the ^G command level using the sequence "^G k", some processes associated with the shell were left running. Now, there are no extra processes left anymore.
Own Id: OTP-2317- The function
gen_tcp:controlling_process(S, NewOwner)
did hang the calling process if it was not the current owner ofS
. This is now corrected. If called by any other process than the current owner{error, eperm}
will be returned.
Own Id: OTP-2321
Aux Id: seq 779- When application environment variables are given on the command line, no error message was given if the variable's value was malformed; application:get_env/2 simply returned 'undefined'. Now, application:start/1 returns an error in those cases.
(*** POTENTIAL INCOMPATIBILITY ***)
Own Id: OTP-2350
Aux Id: OTP-2347, OTP-2348- If a process attempts to call erl_ddll:unload_driver/1 on a driver for which it didn't previously call erl_ddll:load_driver/2, the unloading fails. In previous release, either the result 'ok' was returned, or in certain cases the erl_ddll server crashed. Now the correct error tuple is returned.
(*** POTENTIAL INCOMPATIBILITY ***)
Own Id: OTP-2568- Sometimes when a R3 node and a R4 node were connected, global could crash due to not checked '{badrpc,nodedown}' messages. This is now corrected.
Own Id: OTP-2648
Aux Id: Seq 987- The processes which controls a port corresponding to a socket is now set to priority high instead of normal to assure that e.g node-ticks between distributed nodes are sent fast enough.
Own Id: OTP-2709Improvements and new features
- The documentation has been augmented with a description of the error return values from erl_ddll:load_driver/2 and erl_ddll:unload_driver/1, and the error formatting function format_error/1.
Own Id: OTP-2569- The 'backlog' option to gen_tcp:listen/2 is now documented.
Own Id: OTP-2674Kernel 2.1
Fixed errors and malfunctions
- For the arguments to the command-line option -s, the documentation was incorrect. It has been changed to reflect the actual behaviour, namely that all arguments to the function called by -s are passed as atoms.
Own Id: OTP-2087- When using the -boot and -config command-line options on Windows, filenames in the native Windows syntax using only backslashes didn't work -- forward slashes had to be used. Now backslashes work as well as forward slashes.
Own Id: OTP-2373- An unnecessary report to the error logger caused by a timeout from
inet:gethostbyname
andinet:gethostbyaddr
is removed.
Own Id: OTP-2478Improvements and new features
- New start type, {failover, node()}, added. Note, for compability reasons this is only valid if the new key
start_phases
is defined in the.app
-file for the application, refer toapplication (3)
. It is also possible to check the current start type byapplication:start_type()
, refer toapplication (3)
Own Id: OTP-1504
Aux Id: OTP-1979, OTP-2498- A first increment to allow several global name spaces to exist in the same system. The Global Groups are defined in the .config file by the key '{node_groups, [{GroupName, [Node]}]}. If the node_groups-key is not defined the system behaves as before; if the Global Group service is used then it is required that all nodes in a system are defined in one. and only one, Global Group. It is not possible to mix nodes belonging to a global group and nodes not belonging to a global group in the same system, if global group functionality is used.
Missing functionality: Reconfiguration, at the moment it is not possible to change the configuration without restarting all nodes.
Own Id: OTP-1559
Aux Id: OTP-2497- Better error messages for erroneous .config file.
Own Id: OTP-1983- The functions
write_file_info/2
,change_owner/2,3
, andchange_time/2,3
in thefile
module are now documented.
Own Id: OTP-2252
Aux Id: seq 710- It is now possible to synchronize the start of an application by defining a new key in the
.app
file, {start-phases, [{Phase, Args}]}. This will result that the new call back functionMod:start_phase(Phase, Args)
is called, Mod is the module defined in themod
key of the application. There is also a generic help module to syncronize the start of included applications,application_starter
. If this module is defined in themod
key for the top application, the included applications will be started in each start phase in the order of appearance in theincluded_applications
key.
Own Id: OTP-2498
Aux Id: OTP-1504- It is added to the documentation of
file:list_dir/1
that the returned filenames are not sorted.
Own Id: OTP-2508
Aux Id: seq 891- A new key,
id
, in the application resource file (.app
, ). It can be used to define the product identification of the application.
Own Id: OTP-2518- The description of error_handler:undefined_global_name/2 has been removed, since it's no longer called from Erlang 4.6 and later.
Own Id: OTP-2525- Sequential tracing is available in alfa status and only for JAM systems. Since it is an alpha release the programmatic interface could be slightly changed based on experience from users. The module
seq_trace
contains the interface. Sequential tracing makes it possible to trace all messages that are a direct result from one initiating message e.g. all messages in a call-setup for one connection.
Own Id: OTP-2527- It is now possible to read an application's resource file (.app) keys. New functions: application:get_all_key() application:get_all_key(Application) application:get_key() application:get_key(Application, Key)
Own Id: OTP-2535R3B02 (Kernel 2.0.5)
Fixed errors and malfunctions
- The description of the options
resuaddr
andkeepalive
ininet:setopts/2
has been corrected.
Own Id: OTP-2223
Aux Id: seq 679- The reference manual for the
kernel
application is corrected regarding theboot_server_slaves
variable. The value should be a list of slave IP-addresses and not a list of nodenames as stated earlier.
Own Id: OTP-2224
Aux Id: seq 680application:permit(App, false)
may hang during certain circumstances. This is corrected.
Own Id: OTP-2231
Aux Id: seq699 HA72879- The Erlang system did always contact the DNS server (if configured) on startup and this could cause the system to hang. This is now corrected.
Own Id: OTP-2308
Aux Id: seq 765dist_ac
could hang forever if a nodedown was received at certain times.
Own Id: OTP-2368
Aux Id: seq813R3B01 (Kernel 2.0.4)
Fixed errors and malfunctions
- The
-pa
and-pz
options toerl
did not add the paths to the code server when combined with the-mode embedded
option. This is corrected.
Own Id: OTP-2160
Aux Id: seq 644R3B (Kernel 2.0.3)
Fixed errors and malfunctions
- The file:sync/1 used to crash the process for the file it was used on; this has been corrected.
Own Id: OTP-1778
Aux Id: seq379- os:cmd/1 used to hang if given a command containing a shell comment character, for example: os:cmd("ls #"). This has been corrected.
Own Id: OTP-1805
Aux Id: seq 385- The 'EXIT' reason reported from the BIF process_info/1 is corrected; it now reports 'badarg' when the argument is not a pid.
Own Id: OTP-1874- The documention for erlang:register/2 has been reworded to clarify that a registered name can be used by the send operation, rather than generally.
Own Id: OTP-1875- The call to erl_ddll:unload_driver for a statically linked in driver now returns {error,linked_in_driver}. Previously the incorrect result {error, not_loaded} was returned.
(*** POTENTIAL INCOMPATIBILITY ***)
Own Id: OTP-1962- global:(un)register_name is changed to set lock only on the nodes known to the global_name_server.
Own Id: OTP-2011- When the
pg2
server is started and a new disk log is opened, the call todisk_log:open
used to crash. This has been corrected.
(*** POTENTIAL INCOMPATIBILITY ***)
Own Id: OTP-2028- A more informative error messages is displayed if you try to start an Erlang node with the same name as an existing. The message in R3A was cryptic.
Own Id: OTP-2032
Aux Id: seq 534- The reference manuals for modules
gen_tcp
,gen_udp
andinet
are corrected.
Own Id: OTP-2034
Aux Id: seq 527- When loading of a module fails (for instance, because of a corrupted file), the code server will print an error report which includes the name of the file. The error messages printed by the binary loader are still printed, however. In a future version, there will be ONE message printed, and it will be more informative.
Own Id: OTP-2049
Aux Id: seq 546- In UNIX when the resolver file (typically /etc/resolv.conf) is not found, this is not treated as an error any more. A warning is issued and this type of warning is disabled as default. The warning messages can be turned on with the kernel environment variable
inet_warnings = on
.
Own Id: OTP-2053
Aux Id: seq 552- The communication between distributed Erlang nodes could hang if one of the nodes suddenly dies. The cause was incomplete error handling in the inet_* modules and the inet-driver. This is corrected.
Own Id: OTP-2055
Aux Id: seq 549- There was a problem (in R3A) on Windows NT , that it was impossible to make contact between two Erlang nodes on the same machine if the machine was not configured to use DNS and did also not have it's own hostname in a lmhosts file. This is corrected.
Own Id: OTP-2061
Aux Id: seq 572, seq 573- The documentation has been updated to cover VxWorks too.
Own Id: OTP-2157Improvements and new features
- The documentation for
erlang:process_info(Pid, status)
now lists thesuspended
state as a possible return value.
Own Id: OTP-2105
Aux Id: seq 601- The timeouts for
heart
are now configurable. The environment variable HEART_BEAT_TIMEOUT can be used to set the maximum time that heart accept without getting any heart beat message from the Erlang node. Another variable HEART_BEAT_BOOT_DELAY can be used to set the delay time before the hardware watchdog (if any) is triggered. This is used to reserve time for closing down the system in a proper way without interference from the watchdog. Both variables can have values in seconds and must be in the range 10 < x <= 65535. If the variable(s) are not set the default value is 60 seconds for both timeouts.
Own Id: OTP-2143- It is now possible to tell the Erlang node to try with
dns
even if ONLYnis
ornis+
and notdns
is specified in the/etc/nsswitch.conf
file. This can be activated with the kernel valiableinet_dns_when_nis
set totrue
. The variable can be set in the start script or on the command line like this:erl -kernel inet_dns_when_nis true
.
Own Id: OTP-2153R3A02
Fixed errors and malfunctions
- The erlang distribution did not work if the search entry in /etc/resolv.conf was missing. This is corrected.
Own Id: OTP-2036
Aux Id: seq 542- The required format of domain and hostnames is relaxed. Now the requirement is that the name only consists of visible characters (16#21..16#7E).
Own Id: OTP-2037
Aux Id: seq 543R3A (Kernel 2.0)
Fixed errors and malfunctions
- An application can be loaded even if it includes another application which is not yet loaded.
Own Id: OTP-1586- Now the tty is reset correctly when leaving Erlang.
Own Id: OTP-1654- disk_log always truncated internal wrap logs; this is corrected.
Own Id: OTP-1869- The call to pg2:get_closest_pid exited if the process group has no members. This is corrected.
(*** POTENTIAL INCOMPATIBILITY ***)
Own Id: OTP-1945Improvements and new features
- Start of applications is now more asynchronous, in order to prevent deadlock if a starting application calls
application:start
andwhich_applications
.
Own Id: OTP-1629- The application_controller now uses less memory for the storage of application specifications
Own Id: OTP-1630- The documentation about how to start distributed applications is improved.
Own Id: OTP-1631- Improvements in the
disk_log
module: Log name is printed from theinfo
function. A Pid is deleted from log owners when the Pid dies or calls close. Reconfiguration of logs is now handled correctly.
Own Id: OTP-1634
Aux Id: OTP-1435- The
application_controller
is split into two processes; one that handles local applications and one that handles the distributed applications. If distributed applications are used, the configuration parameterstart_dist_ac
should be set.
Own Id: OTP-1636- The new functions pwrite and pread are added to the file module. These functions makes read and write on a specific position in a file more efficient.
Own Id: OTP-1640- The syntax of different files defined by Kernel is described in separate documents. Se the reference manual for
app(4)
andconfig(4)
.
Own Id: OTP-2149Known problems
- It is currently not possible to open a
disk_log for reading only. The same limitation applies toets:file2tab . We consider this to be a bug which will be fixed in a forthcoming version.
Own Id: OTP-17161 Kernel 1.3.2
1.1 Fixed Bugs and malfunctions
file:stop
does not hang any more.
Own Id:OTP-1404
net_kernel
could in some situations send two nodeup messages to the monitor processes (processes that have evaluatednet_kernel:monitor_nodes()
).
This problem could makeglobal
hang when several nodes connected.
Own Id:OTP-1418; OTP-1127, OTP-1412
Aux Id:tir-d-088
net_kernel
did not send nodedown messages for allowed nodes. If net_kernel:allow(Nodes) was used, no nodedown messages at all were sent to monitor processes net_kernel.
nodedown messages are now sent for allowed nodes but are ignored for connection attempts from disallowed nodes.
Own Id:OTP-1419
application_controller
had sync problems in the takeover phase when an application was remote started.
Own Id:OTP-1426
application_controller
did sometimes report{error,{not_started,App}}
even though the application in question has been started on another node.
Own Id:OTP-1454
Aux Id:HA52440
application_controller
could hang due to a deadlock situation during startup in a distributed system.
Own Id:OTP-1472
1.2 Improvements and new features
- The support for dynamic loading of drivers in module
erl_ddll
is enhanced with reference counting of loaded drivers and automatic unloading of drivers when the "owner" process terminates.
Own Id:OTP-1460
- The
os
module has got 2 new functionsgetenv/1
to read environment variables from the hos operating system andfind_executable/1,2
to find executable programs using a search path.
Own Id:OTP-1461
- A new function
application:which_application(Module)
which returns the application thatModule
belongs to.
Own Id:OTP-1008
2 Kernel 1.3.1
2.1 Fixed Bugs and malfunctions
- Malformed string/list as argument to unix:cmd/1 caused entire ERTS to crash.
Own Id: OTP-1384
- It was not possible to convert a non distributed system into a distributed system as stated in the net_kernel reference manual. Note that this is not the recommended way to start a distributed system.
Own Id: OTP-1393
net_adm:world/1
was broken on Windows NT, since it relied onunix:cmd/1
.
Own Id: OTP-1397
- The
disk_log_server
now clears it's state correctly when a disk_log process terminates.
Own Id: OTP-1402
3 Kernel 1.3
3.1 Improvements and new features
net_ticktime
is configurable through thekernel
application.net_ticktime
specifies the time within which a non responding node will be considered to be down.
-boot_var
flag read byinit
. This flag is used to set a path variable in the boot script. If applications will be placed under another directory than $ROOT/lib in an embedded system this flag can be used.
- A new function for controlling execution of applications is added;
application:permit/2
. The function controls which applications are permitted to execute on the node.
- A new configuration parameter
permissions
specifies the default permission an application has when it is loaded.
- New functions in
application
.
application:load(App, Dist)
- set (and check!) distribution configuration for an application at load time.
application:get_application/0,1
- get the application of a pid.
Own Id: OTP-1306
.config
files are now allowed to contain comments.
Own Id: OTP-1134
Aux Id: HA37561
- It is now possible to specify more than one configuration file to
erl
, by using the command line flag-config
.
- The code server (module
code
) did sometimes store relative pathnames which could cause troubles in some cases. The code server is changed to always store absolute pathnames.
Own Id: OTP-1239
Aux Id: erlang/66
- An elucidation regarding strings in the
code
module. Since the1.1
version of the kernel application thecode
module always returns directory (and file) names as strings. See thecode(3)
manual page.
It is preferable that directory names are provided as strings to all functions. The possibility to provide directory names as atoms may be removed in future releases. Module names should always be given as atoms and the possibility to provide module names as strings may be removed in future releases.
Own Id: OTP-1186
code:priv_dir/1
was very slow and is made much faster now.
Own Id: OTP-1339
- The module
disk_log
is moved fromstdlib
tokernel
, and some new functionality is added.disk_log
supports wrap and halt logs, the size of a log is configurable, it supports different file formats, and it supports replicated logs.
Own Id: OTP-1305
- The
erl_boot_server
is dynamically configurable.
Own Id: OTP-1275
- The functions
add_slave/1
,delete_slave/1
andwhich_slaves/0
are added to theerl_boot_server
.
- New option
raw
tofile:open
and also a new variant of the function which takes a list of options. The open with an optionlist is the recommended way to open a file from no on.
Own Id: OTP-1242
- New format for the
Reason
field when{error,Reason}
is returned from functions in thefile
module. There is also new documentation about this in the reference manual.
Own Id: OTP-1075
- The configuration parameter
os
is removed fromkernel.app
. The functionos:type()
is used instead.
Own Id: OTP-1277
3.2 Fixed Bugs and malfunctions
net_adm:world()
is corrected on Windows NT.
Own Id: OTP-1219
file:list_dir("c:")
returns "No such file..." on NT
Own Id:OTP-1237
- Bad call to
c:c/1
did crash the Erlang shell. Solved by addition of a better test that a module name is correct.
Own Id: OTP-1256
Aux Id: erlang/73
- The
rpc:cast
function was synchronous when casted function call was performed at the current node.
Own Id: OTP-1292
3.3 Incompatibilities with Kernel 1.1.1
- New format for the
Reason
field when{error,Reason}
is returned from functions in thefile
module. This is an interface change (the format ofReason
but it will only break a minimal amount (if any) of old code since the previous format ofReason
was more or less useless in match operations. There where also errors in the documentation and other inconsistencies with the old format.
The most likely places where old code needs to be adjusted is where the highlevel functionsconsult
,path_consult
,eval
andpath_eval
in combination with a match for the result{error,open}
is used.
Own Id: OTP-1075
3.4 Known bugs and problems
4 Kernel 1.1.1
4.1 Improvements and new feature
4.2 Fixed Bugs and malfunctions
application:get_env/1
returnedundefined
for all parameters during startup of an application.
Own Id: OTP-1079
- When synchronization of mandatory node fails using the
sync_nodes_mandatory
configuration parameter , the node should be takendown, but it wasn't.
Own Id: OTP-1083
- Manual page for file corrected.
Own Id: OTP-1102
- Attempt to start an application when already running causes error. Now
application:start/1,2
returns{error,{already_started,Name}}
if the application is running.
Own Id: OTP-1111
Aux Id: tir-f-087, tir-d-087
- Restart (
init:restart/0
) of system did not work after a software upgrade. Started using the now old version.
Own Id: OTP-1113
Aux Id: HA37170
init:stop/0
did not work after a restart (init:restart/0
).
Own Id: OTP-1117
4.3 Incompatibilities with Kernel 1.1
4.4 Known bugs and problems
5 Kernel 1.1
5.1 Improvements and new feature
- Application configuration paramaters can be given from the command line (overrides the configuration file):
erl -Appl Key Value- Load applications before start. All applications (included in the boot script) are loaded before the first application is started.
- Heart uses the hardware watchdog (Solaris), see heart(3).
- Added
error_logger:info_msg/1,2
.
- Support for distributed applications enhanced and documented.
5.2 Fixed Bugs and malfunctions
net_adm:ping(Node)
will never returnpong
if this node is not allowed (net_kernel:allow/1
) to connect toNode
.
net_kernel:allow/1
handles hidden nodes.
5.3 Incompatibilities with OTP P1G
- A configuration file must have suffix .config. (For example, to use the file sys.config, erl -config ./sys is used)
- Old boot scripts won't work - generate new with systools.
- Added the application behaviour. Change in .app file: previously,
{start, {M, F, A}}
was specified, now{mod, {M, A}}
should be specified, andM:start(Type, A)
is called.
code:root_dir/0
,code:lib_dir/0
,code:compiler_dir/0
andcode:uc_dir/0
returns a string.
- The
error_handler
is silent, e.g. it will not write** cannot autoload: Mod **
and** undefined registered name: Name **
to stdout any longer.
5.4 Known bugs and problems
-