Age | Commit message (Collapse) | Author |
|
Add a simple wrapper script for the socket ttest program(s).
Intended to be used when running a performance test in a
standard shell (bash).
OTP-14831
|
|
It took "forever" to run the ttest test cases, so the runtime
of these have been adjusted down to 10 seconds (from 60 seconds).
OTP-14831
|
|
Handle (rcv and snd) buffer set failure.
The number of iterations (message exchanges) that the
traffic ping-cases has been adjusted down (by a factor of 10).
Also, improve skip'ing.
OTP-14831
|
|
|
|
The test case tried to validate the (socket option) protocol,
which is not actually available on OpenBSD. So, add a check
if the option is supported.
OTP-14831
|
|
The macro (define) IPTOS_MINCOST does not exist
on OpenBSD 6.3.
OTP-14831
|
|
|
|
* lukas/erts/inet_pktopts_old_linux/OTP-15494:
erts: Fix inet pktopts on very old linux kernels
|
|
|
|
|
|
* sverker/big-band-bug/ERL-804/OTP-15487:
erts: Fix bug in 'band' of two negative numbers, one big
|
|
maint-21
* sverker/fix-atomics-get-large-unsigned/PR-2061/OTP-15486:
erts: Fix possible heap corruption getting atomics
|
|
Conflicts:
erts/preloaded/ebin/atomics.beam
erts/preloaded/ebin/counters.beam
erts/preloaded/ebin/erl_prim_loader.beam
erts/preloaded/ebin/erl_tracer.beam
erts/preloaded/ebin/erlang.beam
erts/preloaded/ebin/erts_code_purger.beam
erts/preloaded/ebin/erts_dirty_process_signal_handler.beam
erts/preloaded/ebin/erts_internal.beam
erts/preloaded/ebin/erts_literal_area_collector.beam
erts/preloaded/ebin/init.beam
erts/preloaded/ebin/otp_ring0.beam
erts/preloaded/ebin/persistent_term.beam
erts/preloaded/ebin/prim_buffer.beam
erts/preloaded/ebin/prim_eval.beam
erts/preloaded/ebin/prim_file.beam
erts/preloaded/ebin/prim_inet.beam
erts/preloaded/ebin/prim_zip.beam
erts/preloaded/ebin/zlib.beam
|
|
* lukas/erts/fix-seq_trace-reset_trace/OTP-15490:
erts: Fix seq_trace:reset_trace dirty gc bug
erts: Use sys_memcpy in copy_one_frag
|
|
Added a number of ttest test cases with transport socket.
Server with transport = socket(tcp), active = true and client
using transport = socket(tcp) (and active = false, once and true).
OTP-14831
|
|
Added a number of ttest test cases with transport socket and gen_tcp.
Server with transport = socket(tcp), active = true and client
using transport = gen_tcp (and active = false, once and true).
OTP-14831
|
|
Added a number of ttest test cases with transport socket.
Server with transport = socket(tcp), active = once and client
using transport = socket(tcp) (and active = false, once and true).
OTP-14831
|
|
Added a number of ttest test cases with transport socket and gen_tcp.
Server with transport = socket(tcp), active = once and client
using transport = gen_tcp (and active = false, once and true).
OTP-14831
|
|
Added a number of ttest test cases with transport socket.
Server with transport = socket(tcp), active = false and client
using transport = socket(tcp) (and active = false, once and true).
OTP-14831
|
|
Added a number of ttest test cases with transport socket and gen_tcp.
Server with transport = socket(tcp), active = false and client
using transport = gen_tcp (and active = false, once and true).
OTP-14831
|
|
Added a number of ttest test cases with transport gen_tcp and socket.
Server with transport = gen_tcp, active = true and client
using transport = socket(tcp) (and active = false, once and true).
OTP-14831
|
|
Added a number of ttest test cases with transport gen_tcp.
Server with transport = gen_tcp, active = true and client
using transport = gen_tcp (and active = false, once and true).
OTP-14831
|
|
Added a number of ttest test cases with transport gen_tcp and socket.
Server with transport = gen_tcp, active = once and client
using transport = socket(tcp) (and active = false, once and true).
Also fixed a counting error in the server (forgot to include the
header, 16 bytes, in the byte count).
OTP-14831
|
|
Added a number of ttest test cases with transport gen_tcp.
Server with transport = gen_tcp, active = once and client
using transport = gen_tcp (and active = false, once and true).
Also a bit of client and server cleanup (remove and cleanup up
some printouts).
OTP-14831
|
|
Added a number of ttest test cases with transport gen_tcp and socket.
Server with transport = gen_tcp, active = false and client
using transport = socket(tcp) (and active = false, once and true).
Also a bit of "grouping".
OTP-14831
|
|
Added a number of ttest test cases with transport gen_tcp.
Server with transport = gen_tcp, active = false and client
using transport = gen_tcp (and active = false, once and true).
Also "fixed" the gen_tcp socket buffer size (default size
was way to small for the "large" messages).
OTP-14831
|
|
|
|
* sverker/big-band-bug/ERL-804/OTP-15487:
erts: Fix bug in 'band' of two negative numbers, one big
|
|
maint
* sverker/fix-atomics-get-large-unsigned/PR-2061/OTP-15486:
erts: Fix possible heap corruption getting atomics
|
|
* sverker/erts/prim_file-perm-own-bigendian/OTP-15485:
erts: Fix warning and potential big-endian-bug in prim_file
|
|
Added a (first) test case based on the ttest modules.
OTP-14831
|
|
Make length/1 yielding
|
|
The guard BIF `length/1` would calculate the length of the list in one
go without yielding, even if the list was were long. To make it even
worse, the call to `length/1` would only cost a single reduction.
This commit reimplements `length/1` so that it eats a number of
reductions proportional to the length of the list, and yields if the
available reductions run out.
|
|
Similar bug as for bxor fixed by abc4fd372d476821448dfb9
Ex:
1> io:format("~.16B\n", [-16#1110000000000000000 band (-1)]).
-1120000000000000000
Wrong result for
(-X bsl WS) band -Y.
where
X is any positive integer
WS is erlang:system_info(wordsize)*8*N where N is 1 or larger
Y is any positive integer smaller than (1 bsl WS)
Fix:
The subtraction of 1 (for 2-complement conversion)
must be carried along all the way to the last words.
|
|
This allows bif1/2/3 to share the main part of the code.
The price is that we always need to copy all three temporary registers
when error handling in bodies, but that should be infrequent.
Additionally it makes it a bit harder to read the disasembly since now
the arguments to BIFs are in the reverse order.
|
|
Add missing annotations in instrs.tab
|
|
Added a global logger that make it possible to log
from the slave nodes (with "ease").
Also "fixed" the test case that failed on "older"
linux (Ubuntu 14.04). For now we let it skip
instead (we should really check the OS version).
Also corrected a couple of (ping-pong) cases for which
the buffer adjustments did not work.
OTP-14831
|
|
Assumed the wrong success value ({ok, _} instead of ok) for the
api-to-connect-tcp test case.
OTP-14831
|
|
Previously the "message interface" between the functions in
socket.erl and the nif-code (socket_nif.c) was "ad hoc".
This has now been changed so that we have a unified message
{'$socket', SockRef | undefined, Tag, Info}
This also has the added advantage of preparing the code for
when we start using the new select-fucntions (with which
its possible to specify your own message). This will be used
in order to get around our eterm "leak" (we will use a simple
counter, maintained in the nif, instead of the [Recv|Send|Acc]Ref
we generate in the erlang code today.
OTP-14831
|
|
|
|
* lukas/erts/fix_lit_msg_copy_in_gc:
erts: Use ptr_val for pointer in gc msg copy
|
|
Due to comparison as a signed integer, when getting an unsigned atomic
in the range 2^63-1..2^64-1 (when the most significant bit was set), the
heap could get corrupted when the integer was retrieved: hsz would get
set to zero, but the code proceeded to build a bignum.
Steps to reproduce (at least on x86_64):
$ erl
1> A = atomics:new(1,[{signed,false}]).
2> atomics:put(A,1,18446744073709551615).
3> atomics:get(A,1).
At the last step, the shell would print some garbage and hang.
|
|
for set_permission and set_owner.
|
|
When seq_trace:reset_trace could be called while a
process was doing a dirty GC. This triggered a race
where all signals was moved to the internal signal
queue during the GC which in turn caused the a heap
overrun problem.
This fix makes it so that the main and msgq lock are
taken before the clear. This will make sure that we
are allowed to do the clear.
|
|
|
|
Dispatching a function and return never use the next instruction.
It's unlikely for raw_raise to use the next instruction.
|
|
Simplify implementation of GC BIFs
|
|
Summary: This commit simplifies the implementation of the "GC BIFs" so
that they no longer need to do a garbage collection, removing duplicate
code for all GC BIFs in the runtime system, as well as potentially
reducing the size of the loaded BEAM code by using shorter
instructions calling those BIFs.
A GC BIF is a guard BIF that will do a garbage
collection if it needs to build anything on the heap.
For example, `abs/1` is a GC BIF because it might need to
allocate space on the heap (if the result is a floating point
number or the resulting integer is a bignum).
Before R12, a guard BIF (such as `abs/1`) that need to allocate
heap space would allocate outside of process's main heap, in
a heap fragment.
GC BIFs were introduced in R12B to support literals. During garbage
collection it become necessary to quickly test whether a term was
a literal. To make the check simple, guards BIFs were no longer
allowed to create heap fragments. Instead GC BIFs were introduced.
In OTP 19, the implementation of literals was changed to support
storing messages in heap fragments outside of the main heap for a
process. That change again made it allowed for guard BIFs to create
heap fragments when they need to build terms on the heap.
It would even be possible for the guard BIFs to build directly
on the main heap if there is room there, because the compiler
assumes that a new `test_heap/2` instruction must be emitted
when building anything after calling a GC BIF. (We don't do that
in this commit; see below.)
This commit simplifies the implementation of the GC BIFs in
the runtime system.
Each GC BIF had a dual implementation: one that was used when the GC
BIF was called directly and one used when it was called via
`apply/3`. For example, `abs/1` was implemented in `abs_1()` and
`erts_gc_abs_1()`. This commit removes the GC version of each BIF. The
other version that allocates heap space using `HAlloc()` is updated to
use the new `HeapFragOnlyAlloc()` macro that will allocate heap
space in a heap fragment outside of the main heap.
Because the BIFs will allocate outside of the main heap, the same
`bif` instructions used by nonbuilding BIFs can be used for the
(former) GC BIFs. Those instructions don't use the macros that save
and restore the heap and stack pointers (SWAPOUT/SWAPIN). If the
former GC BIFs would build on the main heap, either new instructions
would be needed, or SWAPOUT/SWAPIN instructions would need to be added
to the `bif` instructions.
Instructions that call the former GC BIFs don't need the operand
that specifies the number of live X registers. Therefore, the
instructions that call the BIFs are usually one word shorter.
|
|
* bjorn/erts/remove-faulty-assertion:
erl_bif_list: Remove faulty assertion
|
|
* maint:
Fix reading beyond end of bignum in integer squaring
|