Age | Commit message (Collapse) | Author |
|
There is no good reason to say that erlang:raise/3 is only for
debugging. Here is an example where it can be extremely
useful:
try
do_something(Args)
catch Class:Error ->
Stack = erlang:get_stacktrace(),
io:format("Args: ~p\n", [Args]),
erlang:raise(Class, Error, Stack)
That is, we can let it crash, but log additional useful
information before crashing.
Noticed-by: Per Hedeland
|
|
* egil/erts/nif-format_term/OTP-13580:
runtime_tools: Change erts_snprintf to enif_snprintf
erts: Document enif_snprintf
erts: Add tests for enif_snprintf
erts: Add enif_snprintf
Conflicts:
erts/emulator/beam/erl_nif_api_funcs.h
|
|
* egil/erts-epmd/modernize-tests:
Eliminate use of doc and suite clauses
Replace use of test_server:format/2 with io:format/2
Modernize use of timetraps
Remove ?line macros
|
|
'hx' may be used uninitialized
|
|
Introduce section/terminology "Match target".
|
|
Tracing and ETS examples were not separated correctly
under the corresponding headings.
|
|
time_SUITE:consistency/1 would only work in CET, which was
reasonable when the test suites were always run in Stockholm.
Nowadays it is expected that you can run the test suite in any
timezone. Therefore, only make sure that that difference between
localtime/1 and universaltime/1 is "reasonable".
|
|
This reverts commit bd64ad8e15d66e48b36dbe3584315dd5cfc8b59a.
|
|
|
|
|
|
|
|
* lukas/trace-fix:
erts: Only allow remove from trace_status callback
|
|
* rickard/ds-proc-exit/OTP-13123:
Add dirty_heap_access test case
Add dirty_call_while_terminated test case
Move dirty nif test cases into dirty_nif_SUITE
Add better support for communication with a process executing dirty NIF
Remove conditional dirty schedulers API
|
|
Make it so that it is only possible to remove a tracer via
returning remove from an erl_tracer. This limition is put in
place in order to avoid a lot of lock checking and taking
in various places, especially in regards to trace events
happening on dirty schedulers.
|
|
|
|
|
|
|
|
- Termination of a process...
- Modify trace flags of process...
- Process info on process...
- Register/unregister of name on process...
- Set group leader on process...
... while it is executing a dirty NIF.
|
|
* Add the capability to format erlang terms to a char buffer in nifs.
* Bump NIF version to 2.11
|
|
* lukas/erts/max_heap_size/OTP-13174:
erts: Fix non-smp max_heap_size assert
|
|
|
|
Since 3.7, LLVM sometimes generates SSE constants in a special constant
section with the requisite alignment (".rodata.cst16"). This broke
hipe_llvm since it assumed that all constants that were linked from the
text section were constants generated by hipe_llvm.
As this is the first time alignments larger than 8 have been required,
some small changes were required to hipe_consttab and
hipe_bifs:alloc_data/2. Note that hipe_bifs:alloc_data/2 still assumes
that erl_alloc will provide the requisite alignment.
|
|
* lukas/erts/max_heap_size/OTP-13174:
erts: Add max_heap_size remote gc testcase
|
|
|
|
* lukas/erts/max_heap_size/OTP-13174:
erts: Fix max heap size exit when in hipe mode
Update preloaded modules
erts: Fix pre-bif yield current_function
erts: Implement max_heap_size process flag
|
|
|
|
contains flags for super carrier +MMsc*
|
|
|
|
|
|
|
|
|
|
The max_heap_size process flag can be used to limit the
growth of a process heap by killing it before it becomes
too large to handle. It is possible to set the maximum
using the `erl +hmax` option, `system_flag(max_heap_size, ...)`,
`spawn_opt(Fun, [{max_heap_size, ...}])` and
`process_flag(max_heap_size, ...)`.
It is possible to configure the behaviour of the process
when the maximum heap size is reached. The process may be
sent an untrappable exit signal with reason kill and/or
send an error_logger message with details on the process
state. A new trace event called gc_max_heap_size is
also triggered for the garbage_collection trace flag
when the heap grows larger than the configured size.
If kill and error_logger are disabled, it is still
possible to see that the maximum has been reached by
doing garbage collection tracing on the process.
The heap size is defined as the sum of the heap memory
that the process is currently using. This includes
all generational heaps, the stack, any messages that
are considered to be part of the heap and any extra
memory the garbage collector may need during collection.
In the current implementation this means that when a process
is set using on_heap message queue data mode, the messages
that are in the internal message queue are counted towards
this value. For off_heap, only matched messages count towards
the size of the heap. For mixed, it depends on race conditions
within the VM whether a message is part of the heap or not.
Below is an example run of the new behaviour:
Eshell V8.0 (abort with ^G)
1> f(P),P = spawn_opt(fun() -> receive ok -> ok end end, [{max_heap_size, 512}]).
<0.60.0>
2> erlang:trace(P, true, [garbage_collection, procs]).
1
3> [P ! lists:duplicate(M,M) || M <- lists:seq(1,15)],ok.
ok
4>
=ERROR REPORT==== 26-Apr-2016::16:25:10 ===
Process: <0.60.0>
Context: maximum heap size reached
Max heap size: 512
Total heap size: 723
Kill: true
Error Logger: true
GC Info: [{old_heap_block_size,0},
{heap_block_size,609},
{mbuf_size,145},
{recent_size,0},
{stack_size,9},
{old_heap_size,0},
{heap_size,211},
{bin_vheap_size,0},
{bin_vheap_block_size,46422},
{bin_old_vheap_size,0},
{bin_old_vheap_block_size,46422}]
flush().
Shell got {trace,<0.60.0>,gc_start,
[{old_heap_block_size,0},
{heap_block_size,233},
{mbuf_size,145},
{recent_size,0},
{stack_size,9},
{old_heap_size,0},
{heap_size,211},
{bin_vheap_size,0},
{bin_vheap_block_size,46422},
{bin_old_vheap_size,0},
{bin_old_vheap_block_size,46422}]}
Shell got {trace,<0.60.0>,gc_max_heap_size,
[{old_heap_block_size,0},
{heap_block_size,609},
{mbuf_size,145},
{recent_size,0},
{stack_size,9},
{old_heap_size,0},
{heap_size,211},
{bin_vheap_size,0},
{bin_vheap_block_size,46422},
{bin_old_vheap_size,0},
{bin_old_vheap_block_size,46422}]}
Shell got {trace,<0.60.0>,exit,killed}
|
|
* binarin/fix-build-tool-paths/PR-1023/OTP-13562:
Fix program paths used in build process
Conflicts:
erts/configure.in
|
|
|
|
|
|
Some wild attributes are no longer mentioned separately.
|
|
- use Sint for 'left' and Uint for 'pos'
- cost_to_proc(): adjust types, remove unused return value
- copy_utf8_bin(): return Uint
- characters_to_utf8_trap(): remove harmful cast
- unicode_characters_to_binary_2(): correct types in debug code
- erts_convert_filename_to_encoding(): remove useless cast
|
|
- struct erl_heap_fragment: use Uint for sizes
- erl_nif.c: use size_t for sizes
- erts_heap_frag_shrink(): remove now redundant cast
|
|
|
|
|
|
as an enum and replace _MAX with _END
|
|
to obtain match specs
|
|
'on_load' is a call trace.
|
|
|
|
also simplified the interface to to run PAM from trace
|
|
|
|
|
|
All 'EXIT' and monitor messages are sent from 'system'
Timeouts are "sent" from 'clock_service'
|
|
and non-call-trace.
This is the easy way out to avoid difficult locking
scenarios when accessing tracing flags on another process.
|
|
|