Age | Commit message (Collapse) | Author |
|
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.)
|
|
Introudce erts_queue_release_literals() to queue a literal area to be
released.
|
|
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.
|
|
* bjorn/observer/fix-crashdump_viewer/ERL-722/OTP-15365:
Eliminate crash in crashdump_viewer reading some literal maps
|
|
Honor the max heap size when copying literals after purging
|
|
beam_lib: Clarify the beam() type in code and documentation
OTP-15378
|
|
* 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.
|
|
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)
|
|
Does not work.
|
|
* 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.
|
|
|
|
user_dir
user_dir_fun (missing previously)
*_passphrase
system_dir
|
|
user_dir, system_dir and *_passphrase are only used in the default callback module ssh_file
|
|
|
|
This callback module has the knowledge about the different files
used by Erlang/OTP SSH.
It was unfortunatly not documented previously.
|
|
The term "user" means different things in OpenSSH and in Erlang/SSH.
This new chapter explains why.
|
|
* rickard/development_runtime_dependency/OTP-15341:
Fixup development runtime dependencies
|
|
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'.
|
|
|
|
* ingela/public_key/DSA-SHA2/OTP-15367:
public_key: Add DSA with SHA2 support
|
|
* ingela/public_key/DSA-SHA2/OTP-15367:
public_key: Add DSA with SHA2 support
|
|
|
|
* ingela/ssl/use-correct-len-aead:
ssl: Correct length to be used in additional data in CHACHA20_POLY1305 cipher
|
|
|
|
|
|
* 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
|
|
* ingela/ssl/aead-refactor:
ssl: Refactor AEAD ciphers
|
|
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
|
|
|
|
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.
|
|
|
|
|
|
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).
|
|
* maint-19:
Updated OTP version
Prepare release
|
|
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
|
|
|
|
Forward set/update indicator to handler callback changing_config
OTP-15364
|
|
* siri/cuddle:
Fix gen_fsm_SUITE:start2/1 to terminate process synchronously
Fix sys_SUITE:special_process/1 to terminating process synchronously
|
|
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.
|
|
|
|
|
|
maint-19
* hans/eldap/prevent_EXIT_at_close/OTP-15342/ERIERL-242:
eldap: Fix race at socket close
|
|
* maint-20:
Updated OTP version
Prepare release
|
|
* sverker/erts/debug_free_null:
erts: Fix bug in debug_free for NULL pointer
|
|
kernel: Fix spelling error in assert.hrl
|
|
|
|
* igor/tcp-nopush-ERL-698/OTP-15357:
"cork" tcp socket around file:sendfile
Add nopush TCP socket option
|
|
* sverker/erts/18/memory-leak-terminating-port/OTP-14609:
erts: Fix memory leak when sending to terminating port
|
|
|
|
|