Age | Commit message (Collapse) | Author |
|
|
|
|
|
* bjorn/erts/persistent_terms/OTP-14669:
Implement a tab for persistent terms in crashdump viewer
Add tests of persistent terms for crashdump_viewer
Add a persistent term storage
Refactor releasing of literals
Extend the sharing-preserving routines to optionally copy literals
|
|
Co-authored-by: Siri Hansen <[email protected]>
|
|
|
|
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.)
|
|
with handshake
Fix of commit 68d9244ae33e5eea36250c3bb9ffe046a4db5647
|
|
|
|
* ingela/ssl/deliver-all-data-at-close/ERL-731/OTP-15412:
ssl: Extend check for undelivered data at closing
|
|
This is a timing related bug that alas is hard to test
|
|
* ingela/ssl/bench_SUITE-clean-start:
ssl: Make sure benchmark SUITE has a clean start
|
|
|
|
* bjorn/compiler/fix-beam_jump/ERL-759/OTP-15400:
Fix bug when beam_jump removes put_tuple instructions
|
|
* john/erts/minusminus_trapping/OTP-15371:
Optimize operator '--' and yield on large inputs
Inline erts_cmp
Clarify a magical allocation size
Fix trapping in lists:reverse/2
|
|
other purposes than handshaking
|
|
ssl: fix timezone-related bug in ssl_pem_cache
OTP-15402
|
|
|
|
`beam_jump` could remove a `put_tuple` instruction when the
tuple would not be used, but it would leave the following
`put` instructions. Make sure they are removed.
https://bugs.erlang.org/browse/ERL-759
|
|
fix extra parameter in <type>
|
|
Fix docs on gen_event optional callback
|
|
```erlang
Position = integer()
```
Parameter doesn't exist in `read/3,4`
|
|
PropEr does not support the grouped statem-tests. This commits
calls the grouped functions from the functions supported by PropEr.
Optimized with memoization.
Previously only EQC was supported, but the changes to support PROPER is not
just a wrapper. Since I don't have access to eqc I can't test the changes
and therefore eqc is disabeled.
However, with access to eqc it ought to be quite easy to re-enable eqc by
studying the diff.
|
|
Problem on Darwin, Solaris and FreeBSD with local addresses in 127.1.0.0/8
|
|
|
|
Had problems on Darwin, Solaris and FreeBSD.
|
|
Fix the default implementation of address_please
|
|
* jimdigriz/os_mon/fix_cpu_sup_android/OTP-15387:
Make Erlang's cpu_sup function better on Android
SELinux is another cause of MSG_CTRUNC
|
|
The removal set now uses a red-black tree instead of an array on
large inputs, decreasing runtime complexity from `n*n` to
`n*log(n)`. It will also exit early when there are no more items
left in the removal set, drastically improving performance and
memory use when the items to be removed are present near the head
of the list.
This got a lot more complicated than before as the overhead of
always using a red-black tree was unacceptable when either of the
inputs were small, but this compromise has okay-to-decent
performance regardless of input size.
Co-authored-by: Dmytro Lytovchenko <[email protected]>
|
|
Caught with unit test in ssl_pem_cache_SUITE.
When local timezone is PST (Pacific Standard Time), PEM cache was not evicting
expired entries due to file time converstion was done using
calendar:now_to_datetime, while file modification time is actually in local time.
Use os:system_time() to align with file_info modified time.
|
|
It returns `ok`, instead of `noreply`.
|
|
* bjorn/observer/fix-crashdump_viewer/ERL-722/OTP-15365:
Eliminate crash in crashdump_viewer reading some literal maps
|
|
beam_lib: Clarify the beam() type in code and documentation
OTP-15378
|
|
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.
|
|
|
|
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.
|
|
|
|
* 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.
|
|
|
|
* 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
|