Age | Commit message (Collapse) | Author |
|
Use `counters:add/3` instead of `ets:update_counter/3`
for counting the number of times a line is executed.
By default, the reference to the counter array for each module will be
stored in a persistent term and retrieved every time a counter is
updated. This makes the compiler test suite with coverage enabled run
*almost* twice as fast (on my computer, in about 6 minutes down from
more than 11 minutes).
To get even more speed, the new `cover:local_only/0` function can be
called to put cover into a mode where the cover-compiled code can only
be run on the local node. In this mode, the cover-compiled modules in
a more efficient way by compiling the counter reference into the
code. This shaves off about one more minute, making the compiler test
suite with coverage enabled run *more than* twice as fast (in about 5
minutes on my computer).
|
|
Test TLS 1.3 connectivity between ssl server and
openssl s_client.
Change-Id: I926229d6bc9e6670ebe0190b491257876845b570
|
|
|
|
* siri/ct_netconfc/edit-config-list/OTP-15298:
[ct] Allow ct_netconfc:edit_config/3,4,5 to take a list of XML elements
|
|
* siri/ct_telnet/div-improvements/OTP-15229:
[ct] Add option {newline,string()} to ct_telnet:cmd and ct_telnet:send
[ct] Improve error handling of bad regular expressions to ct_telnet
|
|
reltool: Add load_dot_erlang rel option
OTP-15571
|
|
* hans/crypto/disable_blake2_libressl/OTP-15564:
crypto: Disable blake2 in LibreSSL (not supported)
|
|
|
|
* maint:
dialyzer: Fix a bug affecting keyfind/keysearch/keymember
|
|
beam_ssa_type: Propagate the 'none' type from calls
|
|
Consider this pseudo code:
f(...) ->
Val = case Expr of
... ->
... ;
... ->
... ;
... ->
my_abort(something_went_wrong)
end,
%% Here follows code that uses Val.
.
.
.
my_abort(Reason) ->
throw({error,Reason}).
The first two clauses in the case will probably provide some
information about the type of the variable `Var`, information
that would be useful for optimizing the code that follows the
case.
However, the third clause would ruin everything. The call
to `my_abort/1` could return anything, and thus `Val` could
also have any type.
294d66a295f6 introduced module-level type analysis, which will in
general keep track of the return type of a local function
call. However, it does not improve the optimization for this specific
function. When a function never returns, that is, when its type is
`none`, it does not propagate the `none` type, but instead pretends
that the return type is `any`.
This commit extends the handling of functions that don't return to
properly handle the `none` type. Any instructions that directly
follows the function that does not return will be discarded, and the
call will be rewritten to a tail-recursive call.
For this specific example, it means that the type for `Val` deduced
from the first two clauses will be retained and can be used for
optimizing the code after the case.
|
|
* `open/1-2` can return `{error, system_limit}`
* `recv/3` can return `{error, timeout}`
|
|
* `connect/3` can return `{error, timeout}`
* `accept/1` cannot return `{error, timeout}`
* `recv/3` can return `{error, timeout}`
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Branches where the state is altered on both success and failure
are hard to follow and require juggling the current state, so this
commit adds a helper function to make it easier.
|
|
|
|
|
|
|
|
set_aliased_type already preserves fragility when updating the type
of a fragile register.
|
|
|
|
Failure to decode the Grouped AVP results in a throw from module
diameter_gen, which is caught in the normal message decode, but wasn't
when only the AVP is decoded from diameter_traffic (for error checking
and counter increment). The result was no handle_answer/error
callback, and an error return from diameter:call/4 when the detach
option was not specified.
|
|
|
|
Change-Id: Ia84c71214b5379baec3455f0e416a9ea73584750
|
|
Change-Id: I87f2111cd557a0000cfd8ab4d50f4e58787bf104
|
|
- Store FinishedKey in cipher_state.
- Implement state 'wait_finished'.
- Calculate traffic secrets in 'wait_finished' after Finished
received from client and go to state 'Connection'.
- Drop 'change_cipher_spec' messages (middlebox compatibility mode).
- Extend tests of 1-RTT.
Change-Id: Id69619ec5da053ffaaef75378678a27afeef6916
|
|
|
|
|
|
|
|
flight_state is used to handle retransmission timers for DTLS over udp
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Remove duplicate handsake history handling form
ssl_config function. Later we might refactor to avoid
duplication in TLS and DTLS code, but handshake history
does not belong in ssl_config function.
|
|
|
|
|
|
Optimize ssa_opt_sink for huge functions
|
|
* maint:
Introduce ei_init()
Fix bug in ei_accept_tmo
Fix build of erl_interface on BSD
|
|
* rickard/ei-ext-maint/OTP-15442:
Introduce ei_init()
Fix bug in ei_accept_tmo
Fix build of erl_interface on BSD
|
|
|
|
Add hash function BLAKE2 to crypto:hash/hmac
OTP-15564
|
|
The ssa_opt_sink optimization of beam_ssa_opt could get very slow
for certain huge functions. 9a190cae9bd7 partly addressed this issue
by terminating the optimization early if there happened to be no
get_tuple_element instructions at all in the function.
This commit addresses the issue more directly by making the dominator
calculation in beam_ssa:dominators/1 more efficient. The same
algorithm as before is used, but it is implemented in a more efficient
way based on the ideas in "A Simple, Fast Dominance Algorithm"
(http://www.hipersoft.rice.edu/grads/publications/dom14.pdf).
As well as being more efficient, the new implementation also gives
an explicit representation of the dominator tree, which makes it
possible to simplify and optimize the ssa_opt_sink optimization.
|
|
Keep track of tuple elements in type optimization pass
|