aboutsummaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)Author
2018-03-22Fix lock countingRickard Green
2018-03-22Fix signal order for is_process_aliveRickard Green
2018-03-22Fix signal handling priority elevationRickard Green
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 'rickard/dirty-work-gone/OTP-14978'Rickard Green
* rickard/dirty-work-gone/OTP-14978: Reschedule on ordinary scheduler if dirty work is gone
2018-03-13Reschedule on ordinary scheduler if dirty work is goneRickard Green
2018-03-13Merge branch 'rickard/pre-alloc-alignment/OTP-14977'Rickard Green
* rickard/pre-alloc-alignment/OTP-14977: Force 64-bit alignment for pre-allocators unless x86
2018-03-13Force 64-bit alignment for pre-allocators unless x86Rickard Green
2018-03-13Merge branch 'rickard/remove-approx-started/OTP-14975'Rickard Green
* rickard/remove-approx-started/OTP-14975: Remove process start time for crash dumps
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/enif_fprintf-doc'Sverker Eriksson
2018-03-13Merge branch 'sverker/dist-flags-consolidate'Sverker Eriksson
2018-03-13Merge branch 'sverker/unused-atoms'Sverker Eriksson
2018-03-13erts: Remove unused atomsSverker Eriksson
2018-03-13Merge branch 'hasse/dialyzer/extra-range/OTP-14970'Hans Bolinder
* hasse/dialyzer/extra-range/OTP-14970: ssl: Correct some specs os_mon: Correct a spec Fix broken spec in beam_asm Dialyzer should not throw away spec information because of overspec
2018-03-13ssl: Correct some specsHans Bolinder
2018-03-13Merge pull request #1743 from richcarl/io-format-multiple-modifiersHans Bolinder
Allow multiple modifier characters in io:format control sequences OTP-14971
2018-03-12Allow multiple modifier characters in io:format control sequencesRichard Carlsson
This makes it possible to print unicode atoms at the same time as suppressing detection of printable lists.
2018-03-12Merge branch 'hans/ssh/acceptor_restart/OTP-14955'Hans Nilsson
* hans/ssh/acceptor_restart/OTP-14955: ssh: Retry and exponentially backoff listener restart
2018-03-12Merge branch 'hans/crypto/remove_unused_functions/OTP-14956'Hans Nilsson
* hans/crypto/remove_unused_functions/OTP-14956: crypto: Remove undocumented, unused and erroneous functions
2018-03-12Merge branch 'john/erts/tuple-arityval-fixes/OTP-14963/ERL-577'John Högberg
* john/erts/tuple-arityval-fixes/OTP-14963/ERL-577: Make doc entry for maximum tuple size reflect reality Assert that sz <= MAX_ARITYVAL in make_arityval(sz)
2018-03-12Merge branch 'john/erts/assert-on-memcpy-memset-etc'John Högberg
* john/erts/assert-on-memcpy-memset-etc: Always use sys_memcpy/cmp/etc instead of plain memcpy/cmp/etc Check the arguments to sys_memcpy and friends
2018-03-09Merge branch 'peterdmv/use_uri_string/OTP-14902'Péter Dimitrov
* peterdmv/use_uri_string/OTP-14902: common_test: Use uri_string ssl: Use uri_string public_key: Use uri_string observer: Use uri_string Change-Id: I4beac2289db039cc7d566807727c5aaf7fadf942
2018-03-09Merge branch 'maint'Henrik
2018-03-09Merge pull request #1735 from richcarl/io_lib-unscan-fixHans Bolinder
Make io_lib:unscan_format/1 work with pad char and default precision OTP-14958
2018-03-09Update preloaded modulesHenrik
2018-03-09Update primary bootstrapHenrik
2018-03-09Merge branch 'hasse/stdlib/improve_limit_term'Hans Bolinder
* hasse/stdlib/improve_limit_term: stdlib: Improve io_lib:limit_term/2
2018-03-09Merge pull request #1741 from josevalim/jv-debugger-binHans Bolinder
Do not treat binaries as top level in dbg_ieval OTP-14957
2018-03-09crypto: Remove undocumented, unused and erroneous functionsHans Nilsson
crypto:dh_generate_parameters and crypto:dh_check
2018-03-09Always use sys_memcpy/cmp/etc instead of plain memcpy/cmp/etcJohn Högberg
2018-03-09Check the arguments to sys_memcpy and friendsJohn Högberg
Passing NULL is undefined behavior and unconditionally executing these may result in the compiler optimizing away a later NULL check. It can often work since the pointer isn't touched when the length is 0, but it's a major footgun. See ERL-573.
2018-03-08stdlib: Improve io_lib:limit_term/2Hans Bolinder
Improve handling of maps. Addendum to b57e890.
2018-03-08Merge pull request #1737 from richcarl/io-format-printable-strings-docHans Bolinder
Improve documentation of io:format ~p when Unicode is involved
2018-03-08Improve documentation of io:format ~p when Unicode is involvedRichard Carlsson
2018-03-08common_test: Use uri_stringPéter Dimitrov
Change-Id: If9b7c1252642d31e6b802e8410883bfa26292674
2018-03-08ssl: Use uri_stringPéter Dimitrov
Change-Id: I1249b93b1e4a971cf1af2cb96a65563e23117e2b
2018-03-08Merge branch 'ingela/ssl/no-automated-fallback/OTP-14789'Ingela Anderton Andin
2018-03-08ssl: Increase security with safer defaultIngela Anderton Andin
The interoperability option to fallback to insecure renegotiation now has to be explicitly turned on.
2018-03-07erts: Add enif_fprintf docsSverker Eriksson
2018-03-07t.erlBjörn Gustavsson
2018-03-07Merge branch 'rickard/psflgs-fix/OTP-14948'Rickard Green
* rickard/psflgs-fix/OTP-14948: Fix for bug introduced when replacing ERTS_PSFLG_BOUND
2018-03-07Fix for bug introduced when replacing ERTS_PSFLG_BOUNDRickard Green
Bug introduced in commit fbb10ebc4a37555c7ea7f99e14286d862993976a
2018-03-07ssh: Retry and exponentially backoff listener restartHans Nilsson
in case of eaddrinuse. This could happen if the acceptor process dies and is restarted immediatly.
2018-03-07Merge pull request #1732 from bjorng/bjorn/compiler/beam_typeBjörn Gustavsson
Refactor and fix minor bugs in beam_type
2018-03-07Merge branch 'lukas/erts/erl_child_setup_ignore_SIGTERM/OTP-14943'Lukas Larsson
* lukas/erts/erl_child_setup_ignore_SIGTERM/OTP-14943: erts: Ignore SIGTERM in erl_child_setup
2018-03-07Merge pull request #1733 from garazdawi/lukas/erts/cleanup_system_info_docsLukas Larsson
Cleanup erlang:system_info docs
2018-03-07Do not treat binaries as top level in dbg_ievalJosé Valim
Prior to this change, calls inside binaries were treated as top level which would cause the `Fun(Arg)` call inside `<<Fun(Arg)/binary>>` to return an internal dbg_ieval tuple and ultimately error with badarg.
2018-03-07Merge branch 'maint'Péter Dimitrov
* maint: inets: work around http_uri:parse Dialyzer warning in uri_SUITE.erl:274 inets: refine types and doc of http_uri:parse options inets: export types documented for http_uri module Change-Id: Ifff539d8254cc86985f90978dd75a36616136c33
2018-03-07Merge pull request #1724 from lucafavatella/http_uri-typesPéter Dimitrov
Export types documented for http_uri module