aboutsummaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)Author
2018-11-06Add a persistent term storageBjörn Gustavsson
Persistent terms are useful for storing Erlang terms that are never or infrequently updated. They have the following advantages: * Constant time access. A persistent term is not copied when it is looked up. The constant factor is lower than for ETS, and no locks are taken when looking up a term. * Persistent terms are not copied in garbage collections. * There is only ever one copy of a persistent term (until it is deleted). That makes them useful for storing configuration data that needs to be easily accessible by all processes. Persistent terms have the following drawbacks: * Updates are expensive. The hash table holding the keys for the persistent terms are updated whenever a persistent term is added, updated or deleted. * Updating or deleting a persistent term triggers a "global GC", which will schedule a heap scan of all processes to search the heap of all processes for the deleted term. If a process still holds a reference to the deleted term, the process will be garbage collected and the term copied to the heap of the process. This global GC can make the system less responsive for some time. Three BIFs (implemented in C in the emulator) is the entire interface to the persistent term functionality: * put(Key, Value) to store a persistent term. * get(Key) to look up a persistent term. * erase(Key) to delete a persistent term. There are also two additional BIFs to obtain information about persistent terms: * info() to return a map with information about persistent terms. * get() to return a list of a {Key,Value} tuples for all persistent terms. (The values are not copied.)
2018-10-29Refactor releasing of literalsBjörn Gustavsson
Introudce erts_queue_release_literals() to queue a literal area to be released.
2018-10-24Extend the sharing-preserving routines to optionally copy literalsBjörn Gustavsson
In the implementation of the zero-copying term storage, we want to preserve sharing, but not copy literals because the modules holding the literals could be unloaded under our feet.
2018-10-24Merge branch 'bjorn/observer/fix-crashdump_viewer/ERL-722/OTP-15365' into maintBjörn Gustavsson
* bjorn/observer/fix-crashdump_viewer/ERL-722/OTP-15365: Eliminate crash in crashdump_viewer reading some literal maps
2018-10-24Merge pull request #1991 from bjorng/bjorn/erts/fix-max_heap_size/OTP-15360Björn Gustavsson
Honor the max heap size when copying literals after purging
2018-10-24Merge pull request #1992 from bjorng/bjorn/stdlib/beam_lib/ERL-696Björn Gustavsson
beam_lib: Clarify the beam() type in code and documentation OTP-15378
2018-10-24Merge branch 'hans/crypto/cuddle_tests' into maintHans Nilsson
* hans/crypto/cuddle_tests: crypto: Fix tests failing if more than one test engine available This could happen in an Valgrind run: crypto: Disable engine tests on Darwin and Windows Does not work.
2018-10-24crypto: Fix tests failing if more than one test engine availableHans Nilsson
This could happen in an Valgrind run: === Reason: no case clause matching ["otp_test_engine.so", "otp_test_engine.valgrind.so"] in function crypto:check_otp_test_engine/1 (crypto.erl, line 2026) in call from engine_SUITE:engine_load_all_methods/1 (engine_SUITE.erl, line 154)
2018-10-24crypto: Disable engine tests on Darwin and WindowsHans Nilsson
Does not work.
2018-10-24Merge branch 'hans/ssh/document_user/OTP-15314' into maintHans Nilsson
* hans/ssh/document_user/OTP-15314: ssh: Re-phrase and adjust the documentation (ssh_file.xml) ssh: Move some option's documentation to ssh_file user_dir user_dir_fun (missing previously) *_passphrase system_dir ssh: Clearify a couple of options user_dir, system_dir and *_passphrase are only used in the default callback module ssh_file ssh: Links updated in ssh.xml ssh: Add reference manual page for the ssh_file module ssh: Add new User's Guide chapter about SSH terminology The term "user" means different things in OpenSSH and in Erlang/SSH. This new chapter explains why.
2018-10-24ssh: Re-phrase and adjust the documentation (ssh_file.xml)Hans Nilsson
2018-10-24ssh: Move some option's documentation to ssh_fileHans Nilsson
user_dir user_dir_fun (missing previously) *_passphrase system_dir
2018-10-24ssh: Clearify a couple of optionsHans Nilsson
user_dir, system_dir and *_passphrase are only used in the default callback module ssh_file
2018-10-24ssh: Links updated in ssh.xmlHans Nilsson
2018-10-24ssh: Add reference manual page for the ssh_file moduleHans Nilsson
This callback module has the knowledge about the different files used by Erlang/OTP SSH. It was unfortunatly not documented previously.
2018-10-24ssh: Add new User's Guide chapter about SSH terminologyHans Nilsson
The term "user" means different things in OpenSSH and in Erlang/SSH. This new chapter explains why.
2018-10-23Merge branch 'rickard/development_runtime_dependency/OTP-15341' into maintRickard Green
* rickard/development_runtime_dependency/OTP-15341: Fixup development runtime dependencies
2018-10-23Fixup development runtime dependenciesRickard Green
The script 'make/fixup_development_runtime_dependencies' is run at the end of a build of development branches in order to fixup future not yet resolved versions (<app name>-@<ticket>(:<ticket>)+@) in 'runtime_dependencies'.
2018-10-23Update version info for internal patch merge scriptsRickard Green
2018-10-23Merge branch 'ingela/public_key/DSA-SHA2/OTP-15367' into maintIngela Anderton Andin
* ingela/public_key/DSA-SHA2/OTP-15367: public_key: Add DSA with SHA2 support
2018-10-23Merge branch 'ingela/public_key/DSA-SHA2/OTP-15367' into maintIngela Anderton Andin
* ingela/public_key/DSA-SHA2/OTP-15367: public_key: Add DSA with SHA2 support
2018-10-23public_key: Add DSA with SHA2 supportIngela Anderton Andin
2018-10-23Merge branch 'ingela/ssl/use-correct-len-aead' into maintIngela Anderton Andin
* ingela/ssl/use-correct-len-aead: ssl: Correct length to be used in additional data in CHACHA20_POLY1305 cipher
2018-10-23ssl: Correct length to be used in additional data in CHACHA20_POLY1305 cipherIngela Anderton Andin
2018-10-22Update version info for internal patch merge scriptsRickard Green
2018-10-22Merge branch 'raimo/tcp-close-while-send/maint/ERL-561/OTP-12242' into maintRaimo Niskanen
* raimo/tcp-close-while-send/maint/ERL-561/OTP-12242: Write test case Fix hanging gen_tcp send vs close race Conflicts: erts/preloaded/ebin/prim_inet.beam
2018-10-22Merge branch 'ingela/ssl/aead-refactor' into maintIngela Anderton Andin
* ingela/ssl/aead-refactor: ssl: Refactor AEAD ciphers
2018-10-22Eliminate crash in crashdump_viewer reading some literal mapsBjörn Gustavsson
Literal maps with complex keys such as: #{"one"=>1,"two"=>2,"three"=>3,"four"=>4}. would produce a crash dump that `crashdump_viewer` was unable to read. https://bugs.erlang.org/browse/ERL-722
2018-10-21Add version info for internal patch merge scriptsRickard Green
2018-10-19ssl: Refactor AEAD ciphersIngela Anderton Andin
TLS-1.3 needs to handle AEAD inputs diffrently than previous versions. Refactor code to facilitate TLS-1.3 additions. Change CHACHA20_POLY1305 NONCE to match RFC 7905. This will be important later when we fix interop with TLS compatible crypto invocation.
2018-10-19public_key: Add DSA with SHA2 supportIngela Anderton Andin
2018-10-19Write test caseRaimo Niskanen
2018-10-19Fix hanging gen_tcp send vs close raceRaimo Niskanen
While a gen_tcp send was in progress with filled buffers and slow receiver a close (from another process) would place the port in a half dead state so the port could not signal back to send, that waited for confirmation. The solution is to after some time (5 s) of waiting for send confirmation set a monitor on the port, which detects if the port becomes half dead due to close from another process. The close pending loop has also been improved to use the linger timeout for waiting, and to set a system timeout (arbitrarily selected 3 min) to not wait forever when the other end reads data s l o w l y (tarpitting, kind of).
2018-10-19Merge branch 'maint-19' into maintHans Nilsson
* maint-19: Updated OTP version Prepare release
2018-10-19beam_lib: Remove obsolete module() from the beam() typeBjörn Gustavsson
The type `beam()` in the `beam_lib` module is confusing: -type beam() :: module() | file:filename() | binary(). It says that the module name can be used to identify the BEAM module to be accessed, but passing in the module name only works if the BEAM file is located in the current working directory because the module is not searched for in the code path. The reason that it is allowed to pass in the module name as an atom is for backward compatibility. A long time ago, atoms instead of strings were used as filenames. For that reason, `filename` and `file` still accept atoms as filenames (although the practice is frown upon). `beam_lib` accepts an atom as the filename for the same reason. To remove the confusion, remove `module()` from the type and the mention of it in the documentation. Code that uses an atom as a filename will still work, but Dialyzer will issue a warning. https://bugs.erlang.org/browse/ERL-696
2018-10-19hipe: Don't use beam_lib:info/1 with an atom as filenameBjörn Gustavsson
2018-10-19Merge pull request #1975 from sirihansen/siri/logger/config-set-or-updateSiri Hansen
Forward set/update indicator to handler callback changing_config OTP-15364
2018-10-19Merge branch 'siri/cuddle' into maintSiri Hansen
* siri/cuddle: Fix gen_fsm_SUITE:start2/1 to terminate process synchronously Fix sys_SUITE:special_process/1 to terminating process synchronously
2018-10-19Honor the max heap size when copying literals after purgingBjörn Gustavsson
When a module has been purged from memory, any literals belonging to that module will be copied to all processes that hold references to them. The max heap size limit would be ignored in the garbage collection initiated when copying literals to a process. If the max heap size was exceeded, the process would typically be terminated in the following garbage collection. Since the process would be killed anyway later, kill the process before copying a literal that would make it exceed its max heap size. While at it, also fix a potential bug in `erlang:garbage_collect/0`. If it was found that the max heap sized had been exceeded while executing `erlang:garbage_collect/0`, the process would enter a kind of zombie state instead of being properly terminated.
2018-10-18Updated OTP versionOTP-19.3.6.12Erlang/OTP
2018-10-18Prepare releaseErlang/OTP
2018-10-18Merge branch 'hans/eldap/prevent_EXIT_at_close/OTP-15342/ERIERL-242' into ↵Erlang/OTP
maint-19 * hans/eldap/prevent_EXIT_at_close/OTP-15342/ERIERL-242: eldap: Fix race at socket close
2018-10-18Merge branch 'maint-20' into maintHans Nilsson
* maint-20: Updated OTP version Prepare release
2018-10-17Merge branch 'sverker/erts/debug_free_null' into maintSverker Eriksson
* sverker/erts/debug_free_null: erts: Fix bug in debug_free for NULL pointer
2018-10-17Merge pull request #1988 from erlang/lukas/kernel/docs-assertLukas Larsson
kernel: Fix spelling error in assert.hrl
2018-10-17kernel: Fix spelling error in assert.hrlLukas Larsson
2018-10-17Merge branch 'igor/tcp-nopush-ERL-698/OTP-15357' into maintJohn Högberg
* igor/tcp-nopush-ERL-698/OTP-15357: "cork" tcp socket around file:sendfile Add nopush TCP socket option
2018-10-16Merge branch 'sverker/erts/18/memory-leak-terminating-port/OTP-14609' into maintSverker Eriksson
* sverker/erts/18/memory-leak-terminating-port/OTP-14609: erts: Fix memory leak when sending to terminating port
2018-10-16Updated OTP versionOTP-20.3.8.10Erlang/OTP
2018-10-16Prepare releaseErlang/OTP