Age | Commit message (Collapse) | Author |
|
This commit replaces the old memory instrumentation with a new
implementation that scans carriers instead of wrapping
erts_alloc/erts_free. The old implementation could not extract
information without halting the emulator, had considerable runtime
overhead, and the memory maps it produced were noisy and lacked
critical information.
Since the new implementation walks through existing data structures
there's no longer a need to start the emulator with special flags to
get information about carrier utilization/fragmentation. Memory
fragmentation is also easier to diagnose as it's presented on a
per-carrier basis which eliminates the need to account for "holes"
between mmap segments.
To help track allocations, each allocation can now be tagged with
what it is and who allocated it at the cost of one extra word per
allocation. This is controlled on a per-allocator basis with the
+M<S>atags option, and is enabled by default for binary_alloc and
driver_alloc (which is also used by NIFs).
|
|
* maint:
emacs: delimiter first in icr works
emacs: Indent delimiter first in term elements correctly
emacs: Indent tuple (and maps) elements as list elements
Add emacs indention testcase
|
|
* dgud/tools/emacs/indent-tests:
emacs: delimiter first in icr works
emacs: Indent delimiter first in term elements correctly
emacs: Indent tuple (and maps) elements as list elements
Add emacs indention testcase
OTP-14944
|
|
|
|
|
|
Avoid
From:
{
^^element1,
^^element2
}
To:
{
^element1,
^element2
}
|
|
Split the manual testcase and run them in daily tests instead.
Easy to run directly as well:
(cd ../test; cerl -eval "emacs_SUITE:indent([])")
|
|
|
|
|
|
|
|
lcnt:collect is documented as implicitly starting the lcnt server
but didn't do so prior to this commit. I've decided to extend this
behavior to all operations as the overhead is negligible and it's
a bit more convenient to use.
|
|
* maint:
tools: Correct a counting bug in Cover
|
|
See also PR #1641, https://github.com/erlang/otp/pull/1641.
The bug was introduced in commit ab435488a (Erlang/OTP 18).
|
|
The tests assume that the most active process will be the current
one, which is no longer true since the delayed_write option now
uses a wrapper process for much of its work.
The timeout for this test has been increased to account for the
lack of delayed_write; 60s was enough for everything except the
debug build on some machines.
|
|
erlang:is_builtin(erlang, M, F) returns false for apply/2 and
yield/0. The documentation for erlang:is_builtin/3 says that it
returns true for BIFs that are implemented in C. apply/2 and
yield/0 are implemented in C (as BEAM instructions), and
therefore the correct return value is true.
Also see a similar argument that was made for apply/3 in the past:
http://erlang.org/pipermail/erlang-bugs/2015-October/005101.html
https://bugs.erlang.org/browse/ERL-500
|
|
It is assumed that I/O devices can handle character codes greater
than 255.
|
|
|
|
The updates of xref_base:analysis() are cosmetic (the strings are
parsed by the Erlang scanner only).
|
|
* john/erts/runtime-lcnt:
Document rt_mask and add warnings about copy_save
Add an emulator test suite for lock counting
Break erts_debug:lock_counters/1 into separate BIFs
Allow toggling lock counting at runtime
Move lock flags to a common header
Enable register_SUITE for lcnt builds
Enable lcnt smoke test on all builds that have lcnt enabled
Make lock counter info independent of the locks being counted
OTP-14412
OTP-13170
OTP-14413
|
|
|
|
|
|
|
|
|
|
|
|
* bjorn/stdlib/erl_tar/OTP-14278:
erl_tar: Handle leading slashes and directory traversal attacks
Don't create absolute path names in tar files
|
|
We should not assume that erl_tar will allow unpacking tar files
with absolute path names for archive members.
|
|
This is to ensure that files are recompiled if a .hrl file in the
current directory is changed.
|
|
|
|
This allows build scripts to use emake without needing to generate
an Emakefile before running make:all/0,1 or make:file/1,2.
|
|
|
|
epp learned to handle the -warning() directive in 14d72f02, but
make and ct_make were not updated to expect a {warning,_} return
value from epp:parse_erl_form/1.
|
|
Ensure that we cannot get any dangling pointers into code that
has been purged. This is done by a two phase purge. At first
phase all fun entries pointing into the code to purge are marked
for purge. All processes trying to call these funs will be suspended
and by this we avoid getting new direct references into the code.
When all processes has been checked, these processes are resumed.
The new purge strategy now also completely ignore the existence of
indirect references to the code (funs). If such exist, they will
cause bad fun exceptions to the caller, but will not prevent a
soft purge or cause a kill of a process having such live references
during a hard purge. This since it is impossible to give any
guarantees that no processes in the system have such indirect
references. Even when the system is completely clean from such
references, new ones can appear via distribution and/or disk.
|
|
The bug when introduced in OTP-19.0.
Optimize adding multiple modules to an Xref server
|
|
|
|
|
|
OTP-13499
|
|
* egil/tools/modernize-tests:
tools: Don't divide by zero in tests
Fix instruments_SUITE sumblock check
Eliminate use of doc and suite clauses
Replace ?t with test_server
Use test_server:is_debug/0 instead of custom check
Replace use of test_server:format/2 with io:format/2
Eliminate use of ?config() macro
Eliminate use of test_server:fail/0,1
Eliminate erlang:now/0
Modernize use of timetraps
Remove ?line macros
|
|
|
|
|
|
Those clause are obsolete and never used by common_test.
|
|
The macro ?t is deprecated. Replace its use with 'test_server'.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The expression in a bit string comprehension is limited to a
literal bit string expression. That is, the following code
is legal:
<< <<X>> || X <- List >>
but not this code:
<< foo(X) || X <- List >>
The limitation is annoying. For one thing, tools that transform
the abstract format must be careful not to produce code such as:
<< begin
%% Some instrumentation code.
<<X>>
end || X <- List >>
One reason for the limitation could be that we'll get
reduce/reduce conflicts if we try to allow an arbitrary
expression in a bit string comprehension:
binary_comprehension -> '<<' expr '||' lc_exprs '>>' :
{bc,?anno('$1'),'$2','$4'}.
Unfortunately, there does not seem to be an easy way to work
around that problem. The best we can do is to allow 'expr_max'
expressions (as in the binary syntax):
binary_comprehension -> '<<' expr_max '||' lc_exprs '>>' :
{bc,?anno('$1'),'$2','$4'}.
That will work, but functions calls must be enclosed in
parentheses:
<< (foo(X)) || X <- List >>
|