Age | Commit message (Collapse) | Author |
|
|
|
|
|
Also added some links
|
|
|
|
|
|
SSH application
|
|
fbaa0bec replaced the use of now/0 with erlang:monotonic_time/1 but at
the same time introduced a bug in inPeriod/3 so that it would always
return 'true' (the subtraction Time - Now would always result in
a non-positive number that would always be less than Period).
The symptoms of the bug is that when a child has been restarted the
maximum number of times allowed, the supervisor will terminate,
regardless of how much time that elapses between the restarts.
There was no test case that detected this problem. Add the missing
test case to ensure that this bug stays killed.
Reported-by: Rafał Studnicki
|
|
Also make it possible to copy text buffer from current group
process to the JCL mode
|
|
|
|
* hans/ssh/banner_grabbing/OTP-12659:
ssh: added id_string option for server and client
|
|
The user_drv process can crash if ctrl-y is pressed when in switch command mode (ctrl-g).
This is due to switch mode using edlin to parse the input.
And edlin uses the process dictionary to store the kill_buffer.
However the kill_buffer is undefined if not initialized by edlin:init/0
which makes the user_drv process crash since edlin is calling list:reverse/2 with undefined.
Fix calles edlin:init/0 once before server_loop is entered.
|
|
The compile, bitdefault, and bittypes records are not really used
in the #expand{} record.
|
|
* bjorn/compiler/eprof:
v3_life: Optimize updating of the variable data base
beam_jump: Replace use of lists:dropwhile/2 with a custom function
beam_asm: Eliminate unnecessary use of iolist_to_binary/1
beam_bsm: Optimize btb_index()
beam_type: Eliminate redundant calls to checkerror_1/2
erl_expand_records: Simplify handling of call_ext instructions
beam_utils: Optimize index_labels_1/2
beam_block: Optimize matching of binary literals
Move rewriting of bs_match from beam_clean to beam_z
v3_codegen: Reduce cost for fixing up bs_match_string instructions
v3_codegen: Optimize "turning" of y registers
v3_kernel: Optimize subst_vsub/3
orddict: Eliminate unnecessary consing in store/3 and others
compile: Add the {eprof,Pass} option for easy eprof running
compile: Eliminate unnecessary wrappers for compiler passes
Add z_SUITE to validate loaded code
test suite: Always place .core files in data directories
test suites: Unload modules compiled from .core or .S
compilation_SUITE: Unload tested modules using the code server
|
|
Updating of the variable data base takes most of the time.
|
|
The use of lists:dropwhile/2 is noticeable in the eprof results.
|
|
|
|
lists:dropwhile/2 and the fun in btb_index_1/2 shows up in the
top 10 list of eprof. Replace dropwhile with a special-purpose
function for a tiny increase in speed.
|
|
Profiling shows that the excution time for checkerror_1/2 could
be be near the top even for modules without any floating point
operations.
It turns out that the complexity of simplify_float_1/4 is quadratic.
checkerror/1 is called with the growing accumulator for each
iteration. checkerror/1 will traverse the entire accumulated list
*unless* some floating point operations are used.
We can avoid this situation if we only call checkerror/1 when there
are live floating point registers. We can also avoid calling flush/3
if there are no live floating point registers.
|
|
The erl_expand_records module have inherited code from sys_pre_expand.
We can simplify the code for handling the call_ext instruction to
make the code clearer and a smidge faster.
|
|
The execution time for beam_utils:index_labels_1/2 is among
the longest in the beam_bool, beam_bsm, beam_receive, and
beam_trim compiler passes. Therefore it is worthwhile to do
the minor optimization of replacing a call to lists:dropwhile/2
with a special-purpose drop_labels function.
|
|
When matching a binary literal as in:
<<"abc">> = Bin
the compiler will produce a sequence of three instructions
(some details in the instructions removed for simplicity):
bs_start_match2 Fail BinReg CtxtReg
bs_match_string Fail CtxtReg "abc"
bs_test_tail2 Fail CtxtReg 0
The sequence can be replaced with:
is_eq_exact Fail BinReg "abc"
|
|
The actual bs_match_string instruction has four operands:
bs_match_string {f,Lbl} Ctxt NumBits {string,ListOfBytes}
However, v3_codegen emits a more compact representation where
the bits to match are packaged in a bitstring:
bs_match_string {f,Lbl} Ctxt Bitstring
Currently, beam_clean:clean_labels/1 will rewrite the compact
representation to the final representation. That is unfortunate
since clean_labels/1 is called by beam_dead, which means that
the less compact representation will be introduced long before
it is actually needed by beam_asm. It will also complicate any
optimizations that we might want to do.
Move the rewriting of bs_match_string from beam_clean:clean_labels/1
to the beam_z pass, which is the last pass executed before
beam_validator and beam_asm.
|
|
Commit b76588fb5a introduced an optimization of the compile time of
huge functions with many bs_match_string instructions. The
optimization is done in two passes. The first pass coalesces adjacent
bs_match_string instructions. To avoid copying bitstrings multiple
times, the bitstrings in the instructions are combined in to a (deep)
list. The second pass goes through all instructions in the function
and combines the list of bitstrings to a single bitstring in all
bs_match_string instructions.
The second pass (fix_bs_match_string) is run on all instructions in
each function, even if there are no bs_match_instructions in the
function. While fix_bs_match_string is not a bottleneck (it is a
linear pass), its execution time is noticeable when profiling some
modules.
Move the execution of the second pass to the select_binary()
function so that it will only be executed for instructions that
do binary matching. Also take the opportunity to optimize away
uses of bs_restore2 that occour directly after a bs_save2. That
optimimization is currently done in beam_block, but it can be
done essentially for free in the same pass that fixes up
bs_match_string instructions.
|
|
Profiling shows that the execution time for "turning" y registers
is noticeable for some modules (e.g. S1AP-PDU-Contents from the
asn1 test suite). We can reduce the impact on running time by
special-casing important instructions. In particular, there is
no need to look for y registers in the list argument for a
select_val instruction.
|
|
Profiling shows that subst_vsub/3 dominates the running time. It
is therefore worthwhile optimizing it.
|
|
As a minor optimization, eliminate unnecessary cons operations
in store/3, append/3, append_list/3, update/4, and update_counter/3.
|
|
To run eprof for a compiler pass:
erlc +'{eprof,beam_asm}' file.erl
The name of the compiler pass is the name as printed when
'time' option is used. It is usually, but not always, the module
name for the compiler pass.
|
|
Several compiler passes have unnecessary wrapper functions that
can be easily eliminated.
|
|
If we want to have test cases that run eprof, we must make sure that
there are no modules loaded that don't have a working module_info/1
function, since eprof calls module_info(functions) to retrieve the
list of functions in the module. Some test cases load modules compiled
from Core Erlang that don't have any module_info/1 functions, so
we will need make sure that all such modules have been unloaded.
Add z_SUITE:loaded/1 to run after all other test cases to verify that
all modules that the code server consider loaded are indeed loaded and
all have working module_info/0,1 functions.
|
|
For tidiness, always place .core files in data directories.
|
|
The .core or .S files that are compiled in the test cases
may lack module_info/0,1 functions, which will cause problems if
we (for example) try to run eprof later. To avoid that problem,
unload each module directly after testing it.
|
|
* hb/hipe/opaque_bugfix/OTP-12666:
hipe: Fix a bug in the handling of opaque types
|
|
* ia/pr/678/OTP-1267:
Revert "Add workaround for problems with s_client defaults"
ssl: Add unit test case
ssl: Ignore signature_algorithm (TLS 1.2 extension) sent to TLS 1.0/1 server
|
|
This reverts commit a3cf4eb4cdd2ce178d81b62faa9f47485fd82331.
This workaround is no longer needed as the, TLS-1.2 extension,
signature_algorithm is now correctly ignored by previous TLS versions.
|
|
An opaque type ?opaque(_) was put in a list where #opaque{} was
expected.
|
|
* vinoski/minor-erlang-el-fixes:
Minor fixes to emacs erlang-mode
|
|
* zandra/fix-ssl-obsolete-arity:
add arity to obsolete_1(ssl, negotiated_next_protocol, 1)
|
|
|
|
|
|
When the Server header has empty info (or 'none' in config), it is not generated. This is for limiting Banner Grabbing attempts.
|
|
For limiting Banner Grabbing attempts.
|
|
|
|
|
|
The 'time' option currently uses statistics(runtime) to measure
execution times. Typically, statistics(runtime) only returns
result with two significant figures.
Use the new erlang:monotonic_time/0 function to get three
significant figures.
|
|
|
|
|
|
Don't unload modules using BIFs; use the code server to ensure
that code:all_loaded/0 only lists code that is actually loaded.
|
|
* wmalik/slave-specs:
Remove unused comments
Fix Host and Name type in slave.erl
|
|
A warning for an unmatched return was introduced in aaa7c917.
The caller of openzip_close/1 ignores the return value, which
could be an error tuple. In this situation, handling a fatal
error, it is OK to ignore the return value; thus, we only need
to make it explicit that we are ignoring the return value.
|
|
pre TLS 1.2 server should ignore the signature_algorithms extension.
The server code would attempt to select the signature/hash algorithm
even when using TLS 1.0 or 1.1. Instead it should simply use the default
algorithm on those versions.
|