Age | Commit message (Collapse) | Author |
|
|
|
|
|
|
|
* egil/20/erts/signal-service/OTP-14186:
kernel: Document signal server
erts: Use os module instead of erts_internal for set_signal/2
erts: Do not handle SIGILL
erts: Fix thread suspend in crashdump
erts: Do not enable SIGINT
erts: Use generic signal handler
erts: Add OS signal tests
erts: Handle SIGUSR1 via signal service instead
erts: Handle SIGTERM via signal service instead
kernel: Add gen_event signal server and default handler
erts: Add SIGHUP signal handler
erts: Remove whitespace errors
Conflicts:
erts/emulator/beam/bif.tab
|
|
|
|
Use explicit file names of PLTs so that daily builds&tests running
simultaneously under the same user do not interfere with each other
("$HOME/.dialyzer_plt" is the default PLT name).
|
|
|
|
|
|
|
|
|
|
As a preparation for supporting maps in a future commit, refactor
the functions for encoding optional values.
|
|
|
|
Most options to the code generation pass are passed through the
process dictionary. At the same time, an Erule or Erules argument
is passed to most code generation functions. The Erule argument
is only an atom indicating the encoding rules ('ber', 'per', or
'uper').
Introduce a new record #gen{} to contain code generation options
and parameters. Pass it as the Erule argument (renaming it to Gen
in functions that we will have to touch anyway). In this commit,
eliminate the use of the variable 'encoding_options' in the process
dictionary.
|
|
|
|
asn1ct_check numbers all components in SEQUENCEs and SETs, except
for the associated sequence for INSTANCE OF. Remove this exception
so that the code generation pass can depend on SEQUENCEs being
numbered.
|
|
Introduce helper functions to simplify and reduce the size of
gen_encode_constructed_imm/3.
|
|
The to_encoding_order/1 function can be eliminated if we
incorporate its functionality into textual_order/2.
textual_order/2 has a workaround for TermList being longer
than OrderList. Remove the workaround, because the code
being generated would certainly be wrong (better let the compiler
crash and receive a bug report if it happens). The workaround
was not necessary to successfully compile the entire Erlang/OTP
and to run the asn1 test suite.
|
|
As a preparation for future changes, simplify
gen_dec_constructed_imm_2/6 by breaking it apart to two
functions.
|
|
|
|
|
|
|
|
|
|
Performance for processes that receive huge amounts of
messages can be increased by storing the incoming messages
outside the heap (that avoids copying the message in a
garbage collection).
Two OTP processes that are known to receive many messages
are 'rex' (used by 'rpc') and 'error_logger'.
|
|
* maint:
dialyzer: Fix a Dialyzer warning
|
|
|
|
|
|
This fixes commit f0867aa2ccbbf5677e0577bba08f8b7bc53ec0ed
|
|
Conflicts:
OTP_VERSION
|
|
Conflicts:
OTP_VERSION
erts/doc/src/notes.xml
erts/emulator/sys/unix/erl_unix_sys.h
erts/emulator/sys/unix/sys.c
erts/vsn.mk
lib/crypto/c_src/crypto.c
lib/crypto/doc/src/notes.xml
lib/crypto/vsn.mk
lib/inets/doc/src/notes.xml
lib/inets/vsn.mk
lib/ssh/doc/src/notes.xml
lib/ssh/src/ssh.app.src
lib/ssh/src/ssh_connection_handler.erl
lib/ssh/vsn.mk
otp_versions.table
|
|
|
|
The 'deps' field is reset when no longer used, which could possibly
save some memory.
|
|
Spawning all worker processes at once has the potential to increase
peak memory consumption. Therefore the implementation is now slightly
modified: `20 * dialyzer_utils:parallelism()' processes are running in
parallel. 20 i quite a big factor, but seems necessary to keep all
schedulers busy according to the Observer application's Load Charts,
with a 100 ms update interval.
|
|
At common case, which will otherwise leave a big heap.
|
|
Since SCCs and modules are now topologically sorted (relative the
active graph), we can safely assume that workers have been started.
|
|
Although some variable names indicate that lists of SCCs and modules
are sorted, that was not always the case. The effect on the execution
time of sorting them doesn't seem to be significant.
dialyzer_coordinator:sccs_to_pids() should now always return an empty
second list (not yet started workers).
Since the condensation of graphs often needs a lot of heap memory, it
is run in a separate process.
|
|
Compressing the signatures or the contract records would cost time.
The contract records are still held in two places (code server and
PLT) in many cases.
|
|
|
|
The two tables for (record) types and exported types are no longer
kept in memory (by the PLT) when analyzing, which reduces memory
consumption.
A first step towards removing (or replacing) the #plt{} record.
|
|
The -T option has not been working for a long time.
|
|
The table used during translation of forms to types used to be a
dictionary of the type info (-type(), -opaque(), and -record()) for
all modules. Now it is reduced to the modules that are needed to
handle references to types in other modules.
The PLT:s type info is still kept on the heap.
|
|
* maint:
dialyzer: Increase time limit for tests
dialyzer: Optimize typesig
dialyzer: Optimize evaluation of complex code
dialyzer: Optimize collection of variables
Conflicts:
lib/dialyzer/src/dialyzer_typesig.erl
|
|
* hasse/dialyzer/memory_opt/OTP-14126:
dialyzer: Increase time limit for tests
dialyzer: Optimize typesig
dialyzer: Optimize evaluation of complex code
dialyzer: Optimize collection of variables
|
|
|
|
|
|
|
|
|
|
|
|
|
|
26b59dfe67e introduced support for arbitrary Unicode characters in
atoms. After that commit, it is possible to print any atom with
a "~s" format string:
1> io:format("~s\n", ['спутник']).
спутник
Note that the same text as a string will fail:
2> io:format("~s\n", ["спутник"]).
** exception error: bad argument
in function io:format/3
called as io:format(<0.53.0>,"~s\n",
[[1089,1087,1091,1090,1085,1080,1082]])
Being more permissive for atoms is probably beneficial for io:format/2.
However, for io_lib:format/2, the new behavior breaks this guarantee
in the documentation for io_lib:format/2:
If and only if the Unicode translation modifier is used in
the format string (that is, ~ts or ~tc), the resulting list
can contain characters beyond the ISO Latin-1 character range
(that is, numbers > 255).
The problem is that you can no longer be sure whether io_lib:format/2
will return an iolist that can be successfully passed to a port
or iolist_to_binary/1.
We see three solutions:
1. Keep the new behavior. That means that you can get non-iolist data
when you use ~s for printing an atom, but a 'badarg' when printing
Unicode strings. That is inconsistent, and it delays error detection
if the result is passed to a port or iolist_to_binary/1.
2. Always allow Unicode characters for ~s. That would be incompatible,
because ~s says that any binary is encoded in latin1, while ~ts says
that any binary is encoded in UTF-8. To implement this solution, we
could no longer support latin1 binaries; all binaries would have to
be encoded in UTF-8.
3. Only allow ~s for atoms where all characters are less than 256.
Require ~ts to print atoms such as 'спутник'.
We reject solution 1 because it is slightly incompatible and is
inconsistent.
We reject solution 2 because it too incompatible.
Therefore, this commit implements solution 3.
|
|
|