Age | Commit message (Collapse) | Author |
|
Add testcase embryos and reference implementation.
Change name of compile function according to EEP31.
|
|
|
|
Reported by Uwe Dauernheim.
|
|
* mp/fix-erts_poll_info_kp-livelock:
fix livelock in erts_poll_info_kp()
OTP-8632 mp/fix-erts_poll_info_kp-livelock
When kernel poll has been enabled, a livelock could in rare circumstances
occur. Problem reported by Chetan Ahuja, fix by Mikael Pettersson.
|
|
|
|
erts_poll_info_kp() [defined in erts/emulator/sys/common/erl_poll.c
via some name-mangling trickery] contains a code path that can end
up in an infinite loop, causing a livelock. There is a block of code
inside #if ERTS_POLL_USE_UPDATE_REQUESTS_QUEUE that is supposed to
iterate over a linked list of ErtsPollSetUpdateRequestsBlocks and
update two variables based on the sizes of these blocks. The bug is
that the loop forgets to advance the list pointer to the next element,
so if the loop is entered at all (the initial list pointer is non-NULL),
the thread falls into an infinite loop.
This patch, against R13B03 but applies fine to today's git, fixes the
bug by adding a statement to advance the list pointer in the loop.
All other loops over this list appear to be correct.
Thanks to Chetan Ahuja for the original report of a livelock problem
in erts_poll_info_kp().
|
|
|
|
* bg/compiler-attributes:
Remove opaque declarations from the attributes
|
|
The bug was introduced in d60f055697cfe8e7f94be4d291d49bb00a66bc52.
|
|
|
|
The documentation of lists:keysort/2 states that the sort is stable.
|
|
-opaque declarations should not be retained in the attributes
(because they will be loaded along with the code and are not
useful).
While at it, filter away those Dialyzer attributes as early
as possible - in v3_kernel.
|
|
The gen_server and gen_fsm behaviors support the format_status
callback to allow developers to specialize how callback module state
appears within the return value of sys:get_status and within logged
output resulting from abnormal process termination. This patch adds
similar support to gen_event.
Event handlers that export a format_status/2 function, which is an
optional callback, and are registered with an event manager will now
have their format_status callbacks invoked when sys:get_status is
called on the event manager. The term returned from format_status for
this case replaces the default handler state in the sys:get_status
return value.
This patch also extends gen_event to call an event handler's
format_status function (if it exports one) should the handler
terminate abnormally. The term returned from format_status is logged
in place of the handler's state. This is intended to allow developers
to control how much output is logged in the case of abnormal
termination.
The documentation is appropriately extended and new unit tests are
added to cover the new gen_event format_status functionality.
|
|
When a gen_server or gen_fsm process terminates abnormally, sometimes
the text representation of the process state can occupy many lines of
the error log, depending on the definition of the state
term. Developers sometimes would like a way to trim out parts of the
state from the log if those parts don't contribute to documenting the
circumstances of the error, thereby helping to reduce the amount of
logged output.
Since the format_status callback can already format and specialize
gen_server and gen_fsm state for inclusion in the term returned from
sys:get_status, this patch extends format_status in a
backward-compatible way to also be able to specialize the state logged
for abnormal gen_server and gen_fsm termination, and includes new unit
tests to verify the new functionality.
This patch also eliminates the previous restriction that the status
returned by format_status must be a list. It can now be any term.
The documentation is extended to cover the new usage for
format_status, and it's been improved to recommend a form for the
normal case that allows the returned status to fit well with the rest
of the term returned by sys:get_status. The documentation is clear
that this form is only recommended, not required.
|
|
* bg/opt-receive:
Test that gen_server:call/2,3 are fast even with a huge message queue
erts: Add tests for the receive optimization
Update primary bootstrap
erts: Implement recv_mark/1 and recv_set/1 for real
compiler tests: Cover the error handling code in beam_receive
compiler test: Test optimization of receive statements
Optimize selective receives in the presence of a large message queue
Introduce the new recv_mark/1 and recv_mark/1 instructions
Compile tests that communicate with R12 nodes with the r12 option
Move p_run/2 to test_lib
gen: Inline wait_resp_mon/2 to help the compiler optimize
OTP-8623 bg/opt-receive
reveive statements that can only read out a newly created reference are now
specially optimized so that it will execute in constant time regardless of
the number of messages in the receive queue for the process. That
optimization will benefit calls to gen_server:call(). (See gen:do_call/4
for an example of a receive statement that will be optimized.)
|
|
|
|
|
|
|
|
OTP-8627: Fix flex lib(s) installation.
|
|
|
|
* bg/beam_lib:
Remove redundant includes
Make beam_lib:cmp/2 stricter
OTP-8625 bg/beam_lib
The beam_lib:cmp/2 function now compares BEAM files in stricter way. The
BEAM files will be considered different if there are any changes except in
the compilation information ("CInf") chunk. beam_lib:cmp/2 used to ignore
differences in the debug information (significant for Dialyzer) and other
chunks that did not directly change the run-time behavior.
|
|
* dgud/emacs-21-fix:
Remove usage of 'font-lock-preprocessor-face' if not available
|
|
* pl/fix-shared-lib-install:
Fix shared libraries installation
|
|
|
|
New ssl now supports secure renegotiation as described by RFC 5746.
|
|
|
|
|
|
|
|
The recv_mark/1 instruction will both save the current
position in the message queue and a mark (the address of the
loop_rec/2 instruction just following the recv_set/1
instruction). The recv_mark/1 instruction will only
use the saved position if the mark is correct.
The reason for saving and verifying the mark is that
the compiler does not need to guarantee that no other
receive instruction can be executed in between the
recv_mark/1 and recv_set/1 instructions (the mark will
be cleared by the remove_message/0 instruction when a message
is removed from the message queue). That means that arbitrary
function calls in between those instruction can be allowed.
|
|
|
|
We don't attempt to run the generated code, but use beam_disasm
and check for the presence or absence (as appropriate) of the
recv_mark/1 and recv_set/1 instructions.
|
|
If a gen_server process has many messages in its message queue and
calls another gen_server process, the selective receive in
gen_server:call() will have to go through the entire message queue.
Have the compiler generate the new mark_recv/1 and mark_recv/1
instructions that can avoid going through the entire message queue.
|
|
Make the recv_mark/1 and recv_mark/1 instructions known to the
compiler and run-time system. For the moment, make the loader ignore
any occurrences of those instructions in BEAM files.
Also update hipe_beam_to_icode to ignore those instructions.
|
|
R12 nodes cannot load code that use the optimized receive that
we are about to implement.
|
|
OTP-8574: Option to allow invalid row OIDs
OTP-8594: Make snmp forward compatible with new crypto
OTP-8595: snmpc fails to compile BITS with "holes"
|
|
It can be useful for other test suites.
|
|
We are about to introduce a new optimization that requires
the creation of a monitor and the following receive statement
to be in the same function.
|
|
|
|
* ks/syntax_tools:
Fix an erroneous spec
|
|
* ms/epmd-error-checking:
Exit if an error occurs with the listening socket
OTP-8618 ms/epmd-error-checking
The empd program could loop and consume 100% CPU time if an unexpected
error ocurred in listen() or accept(). Now epmd will terminate if a
non-recoverable error occurs. (Thanks to Michael Santos.)
|
|
While at it, take out redundant code.
|
|
* sv/sasl-fix-get_status:
Prepare patch release
fix sys:get_status backward compatibility for sasl release_handler_1
OTP-8619 sv/sasl-fix-get_status
In R13B04 sys:get_status was modified to invoke format_status/2 in the
callback module if the module exports that function. This resulted in a
change to the term returned from calling sys:get_status on the supervisor
module, since supervisor is a gen_server and gen_server exports
format_status. The sasl release_handler_1 module had a dependency on the
pre-R13B04 term returned by sys:get_status when invoked on a supervisor, so
the R13B04 change broke that dependency.
This problem has been fixed by change release_handler_1 to handle both the
pre-R13B04 and R13B04 terms that sys:get_status can return from a
supervisor.
|
|
* bg/file-del_dir:
Adjust test of file:del_dir("..") to accept {error,einval}
|
|
|
|
The beam_lib:cmp/2 function only compares the executable parts
of the BEAM files, not attributes or abstract code. Since the
types and specs (used by Dialyzer) are contained in the abstract
code, beam_lib:cmp/2 will return 'ok' if the only difference
between two BEAM file are in the types or specs.
If an Erlang/OTP system is installed in a revision control
system, and beam_lib:cmp/2 is used to avoid committing unchanged
but newly compiled BEAM files, BEAM files with no other changes
than in types or specs may not get updated, which can problems
if Dialyzer or the debugger is run.
To avoid that problem, change beam_lib:cmp/2 to compare all
chunks *except* for the "CInf" chunk. The "CInf" chunk contains
the compilation time, compiler options, and compiler version.
|
|
OTP-8574: Option to allow invalid row OIDs
OTP-8594: Make snmp forward compatible with new crypto
OTP-8595: snmpc fails to compile BITS with "holes"
|
|
On FreeBSD, file:del_dir("..") will return {error,einval} rather
than the expected {error,eexist}, and so will file:del_dir("../.."),
and so on.
It could be argued that we should change the implementation of
file:del_dir/1 to remap the error code (as some other error codes
are remapped to reduce the differences between different platforms),
but the consistency gained does not seem to be worth the effort.
Therefore, until we'll find a real-world use case where it is
essential to have consistent error codes for file:del_dir("..") on
all platforms, change the test case to accept both errors.
|
|
|
|
|
|
In R13B04 sys:get_status was modified to invoke format_status/2 in the
callback module if the module exports that function. This resulted in
a change to the term returned from calling sys:get_status on the
supervisor module, since supervisor is a gen_server and gen_server
exports format_status. The sasl release_handler_1 module had a
dependency on the pre-R13B04 term returned by sys:get_status when
invoked on a supervisor, so the R13B04 change broke that dependency.
Change release_handler_1 to handle both the pre-R13B04 and R13B04
terms that sys:get_status can return from a supervisor.
|