Age | Commit message (Collapse) | Author |
|
|
|
* sverker/enable-big-creation/OTP-15603:
epmd: Support 32-bit creation values in local node
erts: Robustify epmd reply function
erts: Reject decoded local refs with too large first word
erts: Fix bug in list_to_ref
erl_interface: Remove old encoding of pid,port,refs
erts: Remove old encoding of pids, ports and refs
erts: Make DFLAG_BIG_CREATION mandatory
|
|
* Increase distribution version from 5 to 6
* Introduce new ALIVE2_X_RESP with 32-bit creation
as reply to ALIVE2_REQ when sender dist version >= 6
* Still reply old ALIVE2_RESP with tiny creation 1..3
if sender dist version < 6.
|
|
|
|
|
|
First word must be less than (1 bsl 18) for local refs.
|
|
This commit suppresses the following warning in gcc 4.8.2:
In file included from beam/bif.c:33:0:
beam/bif.c: In function ‘iolist_size_1’:
beam/bif.h:332:14: warning: ‘state_mref’ may be used uninitialized in this function [-Wmaybe-uninitialized]
reg[0] = (A0); \
^
beam/bif.c:2464:11: note: ‘state_mref’ was declared here
Eterm state_mref;
|
|
Before 2d2e78ad6e66 that introduced tail-recursive calls of BIFs, the
stack was guaranteed not to be empty when `erlang:raise/3` was called
from the `catch` block of a `try` (because the `try` had set up a
stack frame that would be deallocated after the `raise` call).
Now the stack can be empty, so the ASSERT() call in next_catch()
that checks that there is a continuation pointer at the top of
the stack may fail.
Move the ASSERT() call to after check for empty stack.
While at it, also add a comment of the reason for the assertion.
|
|
* john/erts/fix-badarg-fixed_apply:
erts: Include argument list on badarg in fixed_apply
|
|
* john/erts/unc-path-size-fix/OTP-15693:
erts: Fix incorrect UNC path length calculation
|
|
This didn't cause any issues for the most part since the path was
still properly formed, but it broke down when appending the
wildcards in file:list_dir/1. The ASSERT_PATH_FORMAT macro would
have caught this in no time, but it went unnoticed because we don't
run debug builds on Windows.
|
|
* sverker/master/enif_whereis_pid-dirty-dtor:
erts: Add test of enif_whereis* from resource destructor
erts: Simplify nif_SUITE:nif_whereis* tests
erts: Schedule resource destructors always
|
|
* maint:
Updated OTP version
Prepare release
# Conflicts:
# OTP_VERSION
# make/otp_version_tickets_in_merge
|
|
Always encode with 32-bit creation value.
|
|
|
|
|
|
maint-21
* max-au/erts/dirty_scheduler_shutdown/PR-2172/OTP-15690:
erts: release dirty runqueue lock before entering endless loop when BEAM is shutting down
# Conflicts:
# erts/emulator/beam/erl_process.c
|
|
* maint:
Fix reception of resume signal on process executing dirty
|
|
* bjorn/hipe-compilation/OTP-15596:
HiPE: Don't fail the compilation for unimplemented instructions
|
|
* rickard/dist_ctrl_get_data/OTP-15617:
Testing of the example gen_tcp_dist module
Add possibility to also get size of data from erlang:dist_ctrl_get_data()
|
|
|
|
Tune BEAM instructions for the new compiler (part 3)
|
|
|
|
|
|
|
|
* max-au/erts/dirty_scheduler_shutdown/PR-2172/OTP-15690:
erts: release dirty runqueue lock before entering endless loop when BEAM is shutting down
|
|
shutting down
This patch fixes a problem happening when BEAM is shutting down. It is possible for a dirty scheduler to take the lock, and keep it, when the system is shutting down. It may also happen that a normal scheduler decides to schedule some dirty job (example is major garbage collection that results in migrating the process into dirty CPU queue), and hangs trying to take the lock that will never be released.
To fix the problem, either release the lock before entering endless wait loop, or reverse the order in which schedulers are stopped. Either fix works, and, of course, it works even better to apply both.
|
|
If a suspend/resume signal pair was sent to a process while it
was executing dirty the resume counter on the process got into
an inconsistent state. This in turn could cause the process
to enter a suspended state indefinitely.
|
|
|
|
Introduce move_src_window[234] instructions for moving several
consecutively numbered Y registers to discontiguously numbered X
registers. This optimization is effective because the compiler has
sorted the `move` instructions in Y register order.
|
|
Added a fun for precondition check run before each test case
is actually run. The primary reason for this is the api_to_connect
test case, which does not work for a number of platforms.
Also, moved the IPv6 check into this fun (instead of an explicit
skip in the test case fun) for the IPv6 test cases.
|
|
|
|
into sverker/master/enif_whereis_pid-dirty-dtor
|
|
|
|
|
|
and change some argc checks from badarg to assert.
|
|
to run user NIF code in a more known execution context.
Fixes problems like user calling enif_whereis_pid() in destructor
which may need to release process main lock in order to lock reg_tab.
|
|
|
|
|
|
|
|
move_dup is used very infrequently.
|
|
|
|
|
|
With the new compiler, it has become less common with a
move to x(0) before a jump. Change the move_jump instruction
to take a destination as well as a source.
|
|
|
|
Also support swap of Y registers.
|
|
|
|
It turns out that sequences such as the following are common:
move x0 Y1
move Y2 x0
|
|
It is relatively common to move something from a Y register to
an X register before trimming.
|
|
Apart from the refactoring, the instruction "put_list x c y" is replaced
with "put_list x n y".
|