Age | Commit message (Collapse) | Author |
|
|
|
* raimo/gen_statem-improvements/OTP-13929:
Log terminate to sys debug
Optimize event timeout
Rework timeout handling
Clarify the chapter 'Postponing Events' (ERL-284)
Fix doc and type for state enter calls
|
|
|
|
* valgrind needs lots of time
|
|
* valgrind needs lots of time
|
|
* valgrind needs lots of time
|
|
This makes proc_lib behaves like a normal process as far
as the propagation of exceptions is concerned.
Before this commit, the following difference could be
observed:
6> spawn_link(fun() -> ssl:send(a,b) end).
<0.43.0>
7> flush().
Shell got {'EXIT',<0.43.0>,
{function_clause,
[{ssl,send,[a,b],[{file,"..."},{line,275}]}]}}
ok
8> proc_lib:spawn_link(fun() -> ssl:send(a,b) end).
<0.46.0>
9> flush().
Shell got {'EXIT',<0.46.0>,function_clause}
After this commit, we get the following instead:
3> flush().
Shell got {'EXIT',<0.61.0>,
{function_clause,
[{ssl,send,[a,b],[{file,"..."},{line,275}]},
{proc_lib,init_p,3,[{file,"..."},{line,232}]}]}}
The stacktrace will show minor differences of course
but the form is now the same as without proc_lib.
The rationale behind this commit is that:
* We now have a single form regardless of how the process
was started
* We can use the stacktrace to programmatically alter behavior
(for example an HTTP server identifying problems in input
decoding to send back a generic 400, or a 500 otherwise)
* We can access the stacktrace to print it somewhere (for
example an HTTP server could send it back to the client
when a debug mode is enabled)
|
|
Handling of timers and timeouts has been cleaned up
and generalized.
Semantic change regarding state timeout zero:
Previously if one state caused a state timeout zero and
managed to stay in the same state to insert additional
timeout zero(s) in the next state callback invocation, then
there would be only one timeout zero event. The mindset
was that the machine was faster then the timeout zero.
This has changed with the mindset that all state callback
invocations should be independent, so now the machine will
get one state timeout zero event per started state timeout
zero.
Note that just using zero timeouts is fairly esoteric...
|
|
* maint:
dbg:fun2ms: allow empty list as head
|
|
* gomoripeti/stdlib/ms_fix/PR-1203/OTP-13974:
dbg:fun2ms: allow empty list as head
|
|
|
|
* raimo/gen_statem-improvements/OTP-13929:
Fix race condition in cancel_timer/1
Use parameterized types
Implement state timeouts
Improve docs and types
Change state entry events into state enter calls
Improve docs
Improve docs
Implement state entry events
Implement call/3 dirty_timeout
|
|
Running 'dbg:fun2ms(fun([]) -> return_trace() end' resulted in an error
"dbg:fun2ms requires fun with single variable or list parameter"
But the empty list is actually a list and it is a valid value as a
match-spec head (matching on arity-0 functions).
Although its practical use is questionable this commit eliminates a
small limitation of ms_transform which is not present in the match-spec
grammar.
|
|
|
|
|
|
* rickard/time-unit/OTP-13831:
Replace usage of deprecated time units
|
|
* maint:
stdlib: Add a testcase for Unicode expander
Support for unicode expander
|
|
* andrey/stdlib/fix_edlin_expand/ERL-1152:
stdlib: Add a testcase for Unicode expander
Support for unicode expander
|
|
|
|
* sverker/ets-load-factor:
erts: Unify reduction count for ets:select
stdlib: Cuddle ets_SUITE for valgrind
stdlib: Fix ets_SUITE:smp_select_delete
erts: Tweak ets grow/shrink to keep up at contention
erts: Fix ets_SUITE:memory
erts: Suppress failed ETS memory checks
erts: Reduce ets hash load factor
erts: Enable a smaller first hash segment for ets
erts: Redesign ets with separate segment tables
erts: Remove unnecessary access of 'is_resizing'
erts: Add ErtsSizeofMember macro
erts: Add ErtsContainerStruct_ for array members
|
|
|
|
no point in checking table load as select_delete does
not shrink.
|
|
by simply asking for the size of struct ext_segtab
|
|
due to the grow/shrink hysteresis of the meta tables
|
|
for faster lookup/insert/delete
at the expense of about one word per object.
|
|
|
|
|
|
|
|
|
|
* bjorn/floor-ceiling/OTP-13692:
Add math:floor/1 and math:ceil/1
Implement the new ceil/1 and floor/1 guard BIFs
|
|
Add math:floor/1 and math:ceil/1 to avoid unnecessary conversions
in floating point expressions. That is, instead of having to write
float(floor(X)) as part of a floating point expressions, we can
write simply math:floor(X).
|
|
The filters in a list comprehension can be guard expressions or
an ordinary expressions.
If a guard expression is used as a filter, an exception will basically
mean the same as 'false':
t() ->
L = [{some_tag,42},an_atom],
[X || X <- L, element(1, X) =:= some_tag]
%% Returns [{some_tag,42}]
On the other hand, if an ordinary expression is used as a filter, there
will be an exception:
my_element(N, T) -> element(N, T).
t() ->
L = [{some_tag,42},an_atom],
[X || X <- L, my_element(1, X) =:= some_tag]
%% Causes a 'badarg' exception when element(1, an_atom) is evaluated
It has been allowed for several releases to override a BIF with
a local function. Thus, if we define a function called element/2,
it will be called instead of the BIF element/2 within the module.
We must use the "erlang:" prefix to call the BIF.
Therefore, the following code is expected to work the same way as in
our second example above:
-compile({no_auto_import,[element/2]}).
element(N, T) ->
erlang:element(N, T).
t() ->
L = [{some_tag,42},an_atom],
[X || X <- L, element(1, X) =:= some_tag].
%% Causes a 'badarg' exception when element(1, an_atom) is evaluated
But the compiler refuses to compile the code with the following
diagnostic:
call to local/imported function element/2 is illegal in guard
|
|
The compiler would crash in v3_codegen when trying to compile the
following code:
is_port(_) -> false.
foo(P) when port(P) -> ok.
We *could* have the compiler interpret the code as:
is_port(_) -> false.
foo(P) when erlang:is_port(P) -> ok.
But that would encourage using the obsolete form of the guard tests.
Note that the following code is illegal:
is_port(_) -> false.
foo(P) when is_port(P) -> ok.
It produces the following diagnostic:
call to local/imported function is_port/1 is illegal in guard
Therefore, we should refuse to compile the code.
|
|
sys_pre_expand previously did a lot more work, for example,
translating records and funs, but now is merely a grab bag
of small transformations. Move those transformations to
v3_core.
|
|
Make it clear that we test that the shell is not dependent on
the compiler application being in the path.
|
|
|
|
|
|
|
|
* sverker/update_counter-deadlock/ERL-188/OTP-13731:
erts: Add test ets_SUITE:update_counter_table_growth
erts: Fix deadlock in ets:update_counter/4
erts: Optimize db_finalize_dbterm_hash
|
|
|
|
See also ERL-182.
|
|
|
|
* siri/cuddle-master:
Add short sleep when killing slave nodes
[ct test] Do reload_config instead of get_config
|
|
slave_SUITE:t_start_link somtimes fails when checking that a slave is
dead. This commit add a short sleep before the check to allow the node
to terminate.
|
|
|
|
It is possible that '...' is added later (OTP 20.0), but for now we
are not sure of all details.
|
|
This reverts commit 7c133fb1094ad1cabbb5cfc157483a43c816c6a9.
|
|
This reverts commit f1987d5299ce67b0eb4c4a83d8ee9bcf7426c307.
|
|
* zandra/test_server/unmatched_returns/OTP-13345:
vts - Fix unmatched_return warnings
test_server_sup - Fix unmatched_return warnings
test_server_node - Fix unmatched_return warnings
test_server_io - Fix unmtached_return warnings
test_server_gl - Fix unmatched_return warnings
test_server_ctrl - Fix unmatched_return warnings
test_server - fix unmatched_return warnings
remove unused purify functions
|
|
* josevalim/supervisor-get-callback-module/PR-1000/OTP-13619:
Return callback module in supervisor format_status
|