application_controller
could hang if application:stop/1
was called at about the same time as the application
terminated.
format_error/1
, change_header/2
and change_notify/3
have been added to the
disk_log
module.
disk_log
module.
Proper error handling has been added. Several bugs
have been fixed.
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 BIF
erlang:old_binary_to_term/1
(which is now equvivalent
to binary_to_term/1
) will be removed in a future
release.
code:is_loaded/1
doesn't type check its arguments.
gen_tcp:send
on a closed socket causes the
process to hang.
gen_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.
file:eval/1
and file:path_eval/2
now conform with their documentation when evaluation of
an expression fails.
spawn(Fun)
, spawn(Node, Fun)
,
and corresponding spawn_link
, replacing previous
undocumented BIFs with the same names.
.erlang
file was executed
were previously not reported in any way. Now, the first such
error is reported using the error logger.
backtrace
to process_info/2
returns
the stack backtrace of a process, as a binary (use
binary_to_list
to expand it into a string).
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
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
and erlang: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
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
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
and
erlang:fault/2
.
(*** POTENTIAL INCOMPATIBILITY ***)
Own Id: OTP-3239
disk_log
module has been improved.
The new notification {blocked_log,
Items}
is
generated when any of the functions alog/2
,
balog/2
, alog_terms/2
, or balog_terms/2
is used with a log that is blocked but not queuing.
The new notification {format_external,
Items}
is generated when alog/2
or alog_terms/2
is used with an internal log.
The new function info/1
returns information about a
disk log.
The functions reopen/2,3
, breopen/3
,
truncate/1,2
and btruncate/2
can be used with
wrap logs.
Several bugs have been fixed.
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.
disk_log
module has been slightly changed
according to the following.
inc_wrap_file/1
sends wrap notices.
inc_wrap_file/1
and change_size/2
return
an error message if anything goes wrong, rather than
terminating the log. block/1,2
, sync/1
and
truncate
no longer queue requests if the log is
blocked with QueueLogRecords
set to false
.
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.