aboutsummaryrefslogtreecommitdiffstats
path: root/lib/kernel
AgeCommit message (Collapse)Author
2018-03-21Implementation of true asynchronous signaling between processesRickard Green
Communication between Erlang processes has conceptually always been performed through asynchronous signaling. The runtime system implementation has however previously preformed most operation synchronously. In a system with only one true thread of execution, this is not problematic (often the opposite). In a system with multiple threads of execution (as current runtime system implementation with SMP support) it becomes problematic. This since it often involves locking of structures when updating them which in turn cause resource contention. Utilizing true asynchronous communication often avoids these resource contention issues. The case that triggered this change was contention on the link lock due to frequent updates of the monitor trees during communication with a frequently used server. The signal order delivery guarantees of the language makes it hard to change the implementation of only some signals to use true asynchronous signaling. Therefore the implementations of (almost) all signals have been changed. Currently the following signals have been implemented as true asynchronous signals: - Message signals - Exit signals - Monitor signals - Demonitor signals - Monitor triggered signals (DOWN, CHANGE, etc) - Link signals - Unlink signals - Group leader signals All of the above already defined as asynchronous signals in the language. The implementation of messages signals was quite asynchronous to begin with, but had quite strict delivery constraints due to the ordering guarantees of signals between a pair of processes. The previously used message queue partitioned into two halves has been replaced by a more general signal queue partitioned into three parts that service all kinds of signals. More details regarding the signal queue can be found in comments in the erl_proc_sig_queue.h file. The monitor and link implementations have also been completely replaced in order to fit the new asynchronous signaling implementation as good as possible. More details regarding the new monitor and link implementations can be found in the erl_monitor_link.h file.
2018-03-13Merge branch 'sverker/dict-put-immed-opt/OTP-14976'Sverker Eriksson
* sverker/dict-put-immed-opt: erts: Optimize erlang:put/2 for hash collision lists erts: Optimize erlang:put/2 for immed values erts: Refactor erlang:put/2
2018-03-13Merge branch 'sverker/dist-flags-consolidate'Sverker Eriksson
2018-03-06Merge branch 'raimo/stop-encouraging-v4-mapped/ERL-503/OTP-13716'Raimo Niskanen
* raimo/stop-encouraging-v4-mapped/ERL-503/OTP-13716: Stop translating V4MAPPED addresses Stop returning V4MAPPED addresses Implement function for IPv4-mapped IPv6 addresses
2018-03-06Merge remote-tracking branch 'origin/hasse/kernel/rpc_doc_fix/OTP-10551'Hans Bolinder
* origin/hasse/kernel/rpc_doc_fix/OTP-10551: kernel: Improve docs of rpc:multicall/5
2018-03-02kernel,stdlib: Remove obsolete use of send with 'noconnect'Sverker Eriksson
as workarounds to avoid blocking auto-connect, which is now asynchronous in OTP-21. Also changed old catch to more efficient try-catch.
2018-03-02erts,kernel: Add dist_util:strict_order_flags/0Sverker Eriksson
to replace DFLAGS_STRICT_ORDER_DELIVERY and remove that compile time dependency.
2018-03-02kernel: Remove DFLAGS_ALL from dist.hrlSverker Eriksson
and remove use in dist_util:check_mandatory
2018-03-02kernel: Simplify dist flags handshake mergingSverker Eriksson
to a simple 'band' operation into ChosenFlags and no need to remember old 'this_flags' and 'other_flags'.
2018-03-02erts,kernel: Add erts_internal:get_dflags/0Sverker Eriksson
for kernel to ask erts about distribution flags and keep this info in one place.
2018-03-02kernel: Remove redundant codeSverker Eriksson
No need to clear them as they cannot be set.
2018-03-02Merge branch 'maint'Lukas Larsson
2018-03-01kernel: Fix handling of os:cmd option max_size in winLukas Larsson
2018-02-28Merge branch 'john/erts/allow-opening-device-files/OTP-11462'John Högberg
* john/erts/allow-opening-device-files/OTP-11462: Allow opening device files and FIFOs with file:open/2
2018-02-28Merge branch 'maint'John Högberg
* maint: Skip testing unavailable interfaces in inet_SUITE:getifaddrs Make re_SUITE:sub_binaries less unstable
2018-02-27kernel: Improve docs of rpc:multicall/5Hans Bolinder
2018-02-27Skip testing unavailable interfaces in inet_SUITE:getifaddrsJohn Högberg
This test consistently failed on Windows when an interface was enabled but unplugged, as the interface was 'up' but not 'running'.
2018-02-26Merge branch 'maint'Lukas Larsson
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-26Allow opening device files and FIFOs with file:open/2John Högberg
To the best of our knowledge this was introduced since file operations on device files/FIFO:s could hang the emulator forever back when the emulator was single-threaded and lacked IO threads; a read operation could block all progress preventing the write operation it waited for from occurring. Granted, this could still happen through starving all dirty IO schedulers, but the same issue can arise with NFS files which we've always allowed. Removing this restriction also lets us remove a stat(2) call that was added to specifically allow `/dev/null`.
2018-02-22Stop translating V4MAPPED addressesRaimo Niskanen
2018-02-21erts: Optimize erlang:put/2 for immed valuesSverker Eriksson
Do destructive write of immed value if key exists. This is an optimization at the expense of get/0 which must now copy all (mutable) key-value tuples.
2018-02-20Merge branch 'maint'Sverker Eriksson
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-13Merge branch 'maint'Sverker Eriksson
* maint: Updated OTP version Update release notes Update version numbers kernel: Add os:cmd/2 with max_size option # Conflicts: # OTP_VERSION # lib/kernel/doc/src/os.xml # lib/kernel/src/os.erl
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-13Stop returning V4MAPPED addressesRaimo Niskanen
2018-02-12Update release notesErlang/OTP
2018-02-12Update version numbersErlang/OTP
2018-02-07Merge branch 'hasse/no_get_stacktrace/OTP-14861'Hans Bolinder
* hasse/no_get_stacktrace/OTP-14861: erts: Update abstract format doc with stacktrace variable wx: Do not call erlang:get_stacktrace() tools: Do not call erlang:get_stacktrace() stdlib: Do not call erlang:get_stacktrace() sasl: Do not call erlang:get_stacktrace() runtime_tools: Do not call erlang:get_stacktrace() reltool: Do not call erlang:get_stacktrace() parsetools: Do not call erlang:get_stacktrace() observer: Do not call erlang:get_stacktrace() mnesia: Do not call erlang:get_stacktrace() (cont) mnesia: Do not call erlang:get_stacktrace() kernel: Do not call erlang:get_stacktrace() inets: Do not call erlang:get_stacktrace() eunit: Do not call erlang:get_stacktrace() et: Do not call erlang:get_stacktrace() dialyzer: Do not call erlang:get_stacktrace() debugger: Do not call erlang:get_stacktrace() debugger: Do not try to restore stacktrace common_test: Do not call erlang:get_stacktrace()
2018-02-05kernel: Do not call erlang:get_stacktrace()Hans Bolinder
2018-02-02Reword docs related to the runtime system modeXavier Noria
The existing wording may be interpreted as saying that embedded mode eager loads all modules. This revision makes clear embedded mode only disables module auto loading. Since I was on it, I have reordered a couple of places to describe interactive first, and then embedded. It feels natural to cover first the default and positive mode (auto loads), and then its negation.
2018-01-29make HiPE work on x86_64 when PIE is enabledbhuztez
Currently HiPE amd64 assumes the runtime system code is loaded into the low 2G of the address space. However, this is not the case when PIE is enabled, it is loaded into a random location. So trampolines are required to call BIFs, and also we have first to load the address of sse2_fnegate_mask to a regisiter before xorpd in fchs.
2018-01-26Implement function for IPv4-mapped IPv6 addressesRaimo Niskanen
2018-01-24Merge branch 'maint'Sverker Eriksson
2018-01-24Merge branch 'sverker/hipe-load-fixing/OTP-14891' into maintSverker Eriksson
2018-01-24kernel: Ignore cores in erl_distribution_SUITELukas Larsson
Some bash versions segfault when a unicode argument is given so we ignore cores created by nodes spawned by this testcase.
2018-01-23Merge branch 'maint'Hans Bolinder
* maint: kernel: Correct contracts and a bug in group_history stdlib: Correct contracts dialyzer: Optimize handling of a lot of warnings Conflicts: lib/kernel/src/erl_boot_server.erl
2018-01-22kernel: Correct contracts and a bug in group_historyHans Bolinder
2018-01-17Fix slow hipe executionSverker Eriksson
particularly slow erlc when compiler is hipe compiled. hipe_unified_loader:load did not patch external call sites and instead caused a double hipe mode switch per call. hipe_unified_loader:load is only used for early modules first loaded as beam and by code:atomic_load and friends.
2018-01-17kernel: Add os:cmd/2 with max_size optionLukas Larsson
2018-01-15Merge branch 'maint'Hans Bolinder
* maint: stdlib: Correct a filelib test case stdlib: Let filelib:find_source() search subdirs
2018-01-12Merge pull request #1645 from Zorbash/document-inet-iRaimo Niskanen
OTP:13713: Add documentation and typespecs for inet:i/0
2018-01-08Merge branch 'john/erts/putenv-thread-safety/OTP-14666'John Högberg
2018-01-05stdlib: Let filelib:find_source() search subdirsHans Bolinder
The Design Principles states that an application can have Erlang source files one level below the "src" directory, and now filelib:find_source() by default searches one level below "src". The same applies to "esrc". That directory is only mentioned in filename(3).
2018-01-03Disallow NULs in filename-encoded stringsJohn Högberg
Previously we accepted trailing NULs, which was backwards compatible as such usage never resulted in misbehavior in the first place. The downside is that it prevented erts_native_filename_need from returning an accurate number of *actual characters*, needlessly complicating encoding-agnostic code like erts_osenv.
2018-01-03Replace the libc environment with a thread-safe emulationJohn Högberg
putenv(3) and friends aren't thread-safe regardless of how you slice it; a global lock around all environment operations (like before) keeps things safe as far as our own operations go, but we have absolutely no control over what libc or a library dragged in by a driver/NIF does -- they're free to call getenv(3) or putenv(3) without honoring our lock. This commit solves this by setting up an "emulated" environment which can't be touched without going through our interfaces. Third-party libraries can still shoot themselves in the foot but benign uses of os:putenv/2 will no longer risk crashing the emulator.
2017-12-21Merge branch 'maint'Sverker Eriksson
2017-12-21Merge branch 'sverker/cuddle-valgrind' into maintSverker Eriksson
2017-12-21Merge pull request #1651 from getong/doc_updateLukas Larsson
false should be never, false not found in the source code