aboutsummaryrefslogtreecommitdiffstats
path: root/erts
AgeCommit message (Collapse)Author
2018-07-20Merge branch 'john/erts/inet-drv-race/OTP-15158/ERL-654' into maint-20Erlang/OTP
* john/erts/inet-drv-race/OTP-15158/ERL-654: Fix a race condition when generating async operation ids
2018-06-28Prepare releaseErlang/OTP
2018-06-28Merge branch 'john/erts/fix-process-schedule-after-free/OTP-15067/ERL-573' ↵Erlang/OTP
into maint-20 * john/erts/fix-process-schedule-after-free/OTP-15067/ERL-573: 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
2018-06-28Fix a race condition when generating async operation idsJohn Högberg
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.
2018-06-14Don't enqueue system tasks if target process is in fail_stateJohn Högberg
The fail state wasn't re-checked in the state change loop; only the FREE state was checked. In addition to that, we would leave the task in the queue when bailing out which could lead to a double-free. This commit backports active_sys_enqueue from master to make it easier to merge onwards.
2018-06-14Fix erroneous schedule of freed/exiting processesJohn Högberg
When scheduled out, the process was never checked for the FREE state before rescheduling, which meant that a system task could sneak in and cause a double-free later on.
2018-06-13Prepare releaseErlang/OTP
2018-06-13Merge branch 'sverker/ets-auto-unfix-delete-race/OTP-15109' into maint-20Erlang/OTP
* sverker/ets-auto-unfix-delete-race/OTP-15109: erts: Fix race between ets table deletion and auto-unfix
2018-06-05Prepare releaseErlang/OTP
2018-06-05Merge branch 'sverker/system-profile-bug/OTP-15085' into maint-20Erlang/OTP
* sverker/system-profile-bug/OTP-15085: erts: Fix bug in system_profile
2018-06-05Merge branch 'sverker/enif_binary_to_term-bug/OTP-15080' into maint-20Erlang/OTP
* sverker/enif_binary_to_term-bug/OTP-15080: erts: Fix bug in enif_binary_to_term for immediates
2018-06-04erts: Fix race between ets table deletion and auto-unfixSverker Eriksson
Problem: 1. Process A fixates table T. 2. Process B starts deleting table T (either by ets:delete or exit) and does tid_clear(). 3. Process A exits and does proc_cleanup_fixed_table() and get NULL from btid2tab() and deallocates DbFixation. 4. Process B continues deleting table in free_fixations_locked() and finds the deallocated DbFixation in the fixing_procs tree. Solution: Wait with tid_clear() until after free_fixations_locked() has traversed the fixing_procs tree.
2018-05-21Fix deadlock in run queue evacuationJohn Högberg
2018-05-21Fix memory leak of processes that died in the run queueJohn Högberg
2018-05-18erts: Fix bug in system_profileSverker Eriksson
seen to cause redundant {profile,_,active,_,_} messages when process is terminating.
2018-05-16erts: Fix bug in enif_binary_to_term for immediatesSverker Eriksson
Symptom: Heap corruption Expanded test case to provoke this bug and test some more term types.
2018-05-02Update release notesErlang/OTP
2018-05-02Update version numbersErlang/OTP
2018-05-02Merge branch 'john/erts/fix-heart-command-overflow/OTP-15034/ERIERL-166' ↵Erlang/OTP
into maint-20 * john/erts/fix-heart-command-overflow/OTP-15034/ERIERL-166: heart: Use ntohs instead of manual conversion # Conflicts: # lib/kernel/test/heart_SUITE.erl
2018-04-24heart: Use ntohs instead of manual conversionJohn Högberg
Multiplying a signed char by 256 is undefined behavior and caused problems on some platforms when the length was long enough. We could cast it to an unsigned int to make it work, but it's best not to reinvent the wheel. Fixes OTP-15034
2018-03-09Update release notesErlang/OTP
2018-03-09Update version numbersErlang/OTP
2018-03-09Update preloaded modulesHenrik
2018-02-27Merge branch 'sverker/erts/more-crash-dump-info/OTP-14820' into maintSverker Eriksson
* sverker/erts/more-crash-dump-info/OTP-14820: erts,observer: Add port-suspended pids to crash dump erts,observer: Add port states and flags to crash dump erts,observer: Add dirty schedulers to crash dump observer: Refactor get_schedulerinfo1 erts,observer: Add more port info to crash dump erts: Cleanup dump_process_info() erts: Include failing garbing process in crash dump erts: Remove unused args to collect_live_heap_frags erts: Add binary vheap sizes to crash dump
2018-02-26Merge branch 'sverker/enif_self-doc' into maintSverker Eriksson
* sverker/enif_self-doc: erts: Clarify enif_self docs
2018-02-26Merge branch 'lukas/kernel/dist_SUITE_corefile_ignore' into maintLukas Larsson
* lukas/kernel/dist_SUITE_corefile_ignore: kernel: Ignore cores in erl_distribution_SUITE
2018-02-26Merge branch 'lukas/erts/dirty_trace_clean_fix/OTP-14938' into maintLukas Larsson
* lukas/erts/dirty_trace_clean_fix/OTP-14938: erts: Delay cleanup of removed tracer on dirty scheds
2018-02-26erts: Delay cleanup of removed tracer on dirty schedsLukas Larsson
It is not simple to do the correct de-allocation on a dirty schedulers, so we just delay it until this process runs on a normal scheduler.
2018-02-23erts: Clarify enif_self docsSverker Eriksson
2018-02-22erts,observer: Add port-suspended pids to crash dumpSverker Eriksson
2018-02-22erts,observer: Add port states and flags to crash dumpSverker Eriksson
2018-02-20erts,observer: Add dirty schedulers to crash dumpSverker Eriksson
2018-02-20Merge PR-1716 from sverker/slash-in-modules/ERL-564/OTP-14933Sverker Eriksson
Reject loading modules with slash in name
2018-02-20erts,observer: Add more port info to crash dumpSverker Eriksson
2018-02-20erts: Cleanup dump_process_info()Sverker Eriksson
by testing F_SENSITIVE only once.
2018-02-20erts: Include failing garbing process in crash dumpSverker Eriksson
Exclude garbing processes, EXCEPT if run by crash dumping thread in which case we assume the heap is healthy without any move markers yet/left. Switched order between (allocating) setup_rootset() and (move marking) collect_live_heap_frags().
2018-02-20erts: Remove unused args to collect_live_heap_fragsSverker Eriksson
2018-02-20erts: Add binary vheap sizes to crash dumpSverker Eriksson
2018-02-19Merge branch 'john/erts/fix-iolist-bitstring-badarg/OTP-14926' into maintJohn Högberg
2018-02-19Merge branch 'john/erts/fix-iovec-unaligned-binaries/OTP-14921' into maintJohn Högberg
2018-02-15badarg on iolist_to_binary(Bitstring)John Högberg
When supplied without an enclosing list, bitstrings were returned as-is instead of badarging.
2018-02-15Handle unaligned binaries in enif_inspect_iovecJohn Högberg
2018-02-15Handle unaligned binaries in erlang:iolist_to_iovec/1John Högberg
A binary is a binary as long as its size in bits is evenly divisible by 8, regardless of whether it has a bit offset or not.
2018-02-15badarg on iolist_to_iovec(Bitstring)John Högberg
When supplied without an enclosing list, bitstrings were silently truncated to [] instead of badarging.
2018-02-15Test badarg when an improper list tail contains a bitstringJohn Högberg
This has always worked but we lacked test coverage for it.
2018-02-15kernel: Reject load of module names with slashSverker Eriksson
or backslash on Windows. Purpose: Prevent tricks to get hostile code running.
2018-02-13Use smaller inputs in iovec testsJohn Högberg
Huge inputs weren't particularly useful and took forever to run, so this commit winds it down to a more sane level that still causes lots of yielding.
2018-02-13Merge branch 'maint-20' into maintSverker Eriksson
* maint-20: Updated OTP version Update release notes Update version numbers erts: Add system_flags(erts_alloc,"+M?sbct *") erts: Add age order first fit allocator strategies erts: Refactor erl_ao_firstfit_alloc erts: Add migration options "acnl" and "acfml" kernel: Add os:cmd/2 with max_size option erts: Add more stats for mbcs_pool erts: Fix alloc_SUITE:migration stdlib: Make ets_SUITE memory check try again erts: Improve carrier pool search erts: Improve alloc_SUITE:migration erts: Refactor carrier dealloc migration
2018-02-13Fix size of fmt_double()'s format_str[] bufferMikael Pettersson
fmt_double() may write up to 8 characters into its format_str[] buffer, which however only has room for 7 characters. This case could be triggered by a call to erts_printf_format() with any floating-point format that also includes #, and + or a space, which may be uncommon, but a nif or driver could issue it.
2018-02-12Update release notesErlang/OTP