Age | Commit message (Collapse) | Author |
|
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.
|
|
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.
|
|
|
|
|
|
|
|
|
|
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".
|
|
|
|
Introduce the GENOP_NAME_ARITY() macro to avoid setting the arity
wrong for for an instruction.
|
|
That will avoid showing garbage instructions that will never be
executed.
|
|
|
|
During socket stop the close environment somehow has
been NULLed. Check this before using when sending the
close message.
|
|
We use clock_gettime(CLOCK_REALTIME, ...) to create a simple
timestamp. This is used both for debugging and when writing
error/warning messages (from the nif-code).
The workaround for the absence of this function (on some platforms,
old versions of darwin for example) is to simply skip the timestamp.
|
|
|
|
|
|
|
|
|
|
Fixed an issue (I think) that during socket close
could cause a core.
|
|
* sverker/ets-select-fixation-owner-change-bug/OTP-15672:
erts: Fix bug for yielding ets:replace
|
|
Found by valgrind:
Conditional jump or move depends on uninitialised value(s)
Suspected: ets_select_replace_1:3034 [erl_db.c]
Bug introduced by already merged parent commit
0d550c80d4f19cc432e7de056169695d436c02a0.
|
|
Fixed a memory leak in the function for address infos encoding.
|
|
Wait for resource-holding processes to garbage collect before
exiting to know destructors have been called.
|
|
* sverker/ets-select-fixation-owner-change-bug/OTP-15672:
erts: Fix ets:select table fixation leak at owner change
erts: Refactor common things into traverse_context_t
stdlib: Clarify docs for ets:info(_, safe_fixed)
|
|
A debug printout in the socket_stop fucntion used the wrong
requestor record for the pid, which may leasd to a confusing
debug printout.
|
|
The activate-next (reader|writer|acceptor) always
*incorrectly* used the read select function.
This has now been changed so that the functions
are created via a macro with an argument specifying
which select function to use.
|
|
retranspissions -> retransmissions
|
|
|
|
Optimize tail-recursive calls of BIFs
OTP-15674
|
|
|
|
|
|
|
|
If a test case timed out, all processes created by it
should die. But because the 'evaluator' processes where
created with spawn_monitor, that was not the case, and
therefor, these processes could linger.
|
|
* maint:
Updated OTP version
Prepare release
|
|
Symtom:
ETS table remains fixed after finished ets:select* call.
Problem:
The decision to unfix table after a yielding ets:select*
is based on table ownership, but ownership might have changed
while ets:select* was yielding.
Solution:
Remember and pass along whether table was fixed
when the traversal started.
|
|
and rename it from match_callbacks_t.
|