Age | Commit message (Collapse) | Author |
|
|
|
|
|
|
|
* hasse/stdlib/fix_io_lib_pretty/OTP-15159:
stdlib: Fix a 'chars_limit' bug
|
|
maint-21
* bjorn/compiler/fix-beam_jump-crash/ERL-660/OTP-15166:
Eliminate a crash in the beam_jump pass
|
|
* john/erts/inet-drv-race/OTP-15158/ERL-654:
Fix a race condition when generating async operation ids
|
|
* bjorn/compiler/fix-map_get/OTP-15157:
Fix internal compiler error for map_get/2
|
|
maint-21
* bjorn/compiler/fix-skipped-matching/ERL-655/OTP-15156:
beam_type: Fix unsafe optimization
|
|
* hans/public_key/remove_unsup_keylens/OTP-15151:
public_key: Remove moduli 5121 and 7167 Thoose were added by 598629aeba9de98e8cdf5637043eb34e5d407751 but are not universaly supported.
|
|
* john/erts/merge-OTP-15067:
Don't enqueue system tasks if target process is in fail_state
Fix erroneous schedule of freed/exiting processes
Fix deadlock in run queue evacuation
Fix memory leak of processes that died in the run queue
|
|
https://bugs.erlang.org/browse/ERL-660
|
|
|
|
The counter used for generating async operation ids was a plain int
shared between all ports, which was incorrect but mostly worked
fine since the ids only had to be unique on a per-port basis.
However, some compilers (notably GCC 8.1.1) generated code that
assumed that this value didn't change between reads. Using a
shortened version of enq_async_w_tmo as an example:
int id = async_ref++;
op->id = id; //A
return id; //B
In GCC 7 and earlier, `async_ref` would be read once and assigned
to `id` before being incremented, which kept the values at A and B
consistent. In GCC 8, `async_ref` was read when assigned at A and
read again at B, and then incremented, which made them inconsistent
if we raced with another port.
This commit fixes the issue by removing `async_ref` altogether and
replacing it with a per-port counter which makes it impossible to
race with someone else.
|
|
Code such as that the following:
Val = map_get(a, Map),
Map#{a:=z} %Could be any map update
would incorrectly cause an internal consistency check failure:
Internal consistency check failed - please report this bug.
Instruction: {put_map_exact,{f,0},{x,0},{x,0},1,{list,[{atom,a},{atom,z}]}}
Error: {bad_type,{needed,map},{actual,term}}:
Update beam_validator so that it understands that the second
argument for map_get/2 is a map.
|
|
beam_type assumed that the operand for the bs_context_to_binary
instruction must be a binary. That is not correct;
bs_context_to_binary accepts anything. Based on the incorrect
assumption, beam_type would remove other test instructions.
The bug was introduced in eee8655788d2, which was supposed
to be just a refactoring commit.
https://bugs.erlang.org/browse/ERL-655
|
|
Thoose were added by 598629aeba9de98e8cdf5637043eb34e5d407751 but are not universaly supported.
|
|
|
|
|
|
* bjorn/compiler/fix-beam_utils/ERL-650/OTP-15150:
Fix unsafe optimization when running beam_block the second time
|
|
maint-21
* john/erts/win32-case-insensitive-osenv/OTP-15147/ERL-644:
Fix environment case sensitivity issues on Windows
|
|
The compiler would crash when compiling code such as:
serialize(#{tag := value, id := Id, domain := Domain}) ->
[case Id of
nil ->
error(id({required, id}));
_ ->
<<10, 1:16/signed, Id:16/signed>>
end,
case Domain of
nil ->
error(id({required, domain}));
_ ->
<<8, 2:16/signed, Domain:32/signed>>
end].
The crash would look like this:
Function: serialize/1
t.erl: internal error in block2;
crash reason: {badmatch,false}
in function beam_utils:live_opt/4 (beam_utils.erl, line 861)
in call from beam_utils:live_opt/1 (beam_utils.erl, line 285)
in call from beam_block:function/2 (beam_block.erl, line 47)
in call from beam_block:'-module/2-lc$^0/1-0-'/2 (beam_block.erl, line 33)
in call from beam_block:'-module/2-lc$^0/1-0-'/2 (beam_block.erl, line 33)
in call from beam_block:module/2 (beam_block.erl, line 33)
in call from compile:block2/2 (compile.erl, line 1358)
in call from compile:'-internal_comp/5-anonymous-1-'/3 (compile.erl, line 349)
The reason for the crash is an assertion failure caused by a previous
unsafe optimization. Here is the code before the unsafe optimization:
.
.
.
{bs_init2,{f,0},7,0,0,{field_flags,[]},{x,1}}.
{bs_put_string,3,{string,[8,0,2]}}.
{bs_put_integer,{f,0},{integer,32},1,{field_flags,[signed,big]},{y,1}}.
{move,{x,1},{x,0}}.
{test_heap,4,1}.
.
.
.
beam_block:move_allocate/1 moved up the test_heap/2 instruction past the
move/2 instruction, adjusting the number of live registers at the same
time:
.
.
.
{bs_init2,{f,0},7,0,0,{field_flags,[]},{x,1}}.
%% Only x1 is live now.
{bs_put_string,3,{string,[8,0,2]}}.
{bs_put_integer,{f,0},{integer,32},1,{field_flags,[signed,big]},{y,1}}.
{test_heap,4,2}. %Unsafe. x0 is dead.
{move,{x,1},{x,0}}.
.
.
.
This optimization is unsafe because the bs_init2 instruction killed
x0.
The bug is in beam_utils:anno_defs/1, which adds annotations indicating
the registers that are defined at the beginning of each block. The
annotation before the move/2 instruction incorrectly indicated that
x0 was live.
https://bugs.erlang.org/browse/ERL-650
https://github.com/elixir-lang/elixir/issues/7782
|
|
|
|
|
|
|
|
Need to create a seperate repo first for this to push to.
|
|
* lukas/travis/deploy:
Add deploy stage to travis-ci
|
|
|
|
* origin/henrik/Update-copyright:
Update copyright year
|
|
|
|
* ingela/ssl/doc-fix-21:
ssl: Document enhancements
|
|
|
|
* lukas/erts/fix_vxworks_configure:
erts: Fix vxworks configure broken by corba removal
|
|
|
|
|
|
|
|
* sverker/macos-select-fd-bug:
erts: Fix MacOS pollset bug
|
|
* lukas/otp_mibs/deprecate/OTP-15141:
Update primary bootstrap
Deprecate otp_mibs
|
|
* siri/logger-fix:
[logger] Update documentation
[logger] Adjust priority settings in test
[logger] Unregister handler names before terminating
[logger] Stress overload_kill tests in disk_log handler
|
|
|
|
Now only setting high priority on every second burst sending process,
to allow for handler process to be scheduled in every now and then.
|
|
|
|
|
|
* peppe/common_test/no_export_all_warning/OTP-14810:
No export_all warning when compiling test suites
OTP-14810
|
|
* peppe/kernel/logger_updates:
[logger] Correct documentation
[logger] Update handler documentation
[logger] Fix test suite compilation warnings
[logger] Fix failing tests
[logger] Change overload_kill_restart_after value to infinity
[logger] Change name of function sync/1 to filesync/1
[logger] Reset logger config after tests
[logger] Don't delete log file of failing test cases
[logger] Set up priority for processes generatig test bursts
[logger] Stress overload_kill tests a bit more
[logger] Remove some compiler warnings in test suites
[logger] Sort keys when testing formatter template
[logger] Skip test involving file access rights on windows
[logger] Skip some overload protection tests when using dirty schedulers
|
|
Info about support, compatibility, deprecation and removal
OTP-15140
|
|
* hans/crypto/EVP_DH_key/OTP-14864:
crypto: Remove EVP_PKEY from dh_compute_key_nif
crypto: Try fix valgrind errors
|
|
Included config files relative to sys.config directory
OTP-15137
|
|
Change the way included config files are searched in sys.config.
Search first relative to sys.config directory, then relative
to current working directory, for backward compatibility.
This permit same result when using a sys.config file in a release
or starting manually a node with -config.
Credit to Siri Hansen for test case.
|
|
|
|
* ingela/ssl/21-enhanchment:
ssl: Add handle_continue/2 and document enhancements
|