Age | Commit message (Collapse) | Author |
|
|
|
Up until now, if {linger, {true, 0}} is set on the socket and there is
data in the port driver queue, the connection is not aborted until
the port queue is empty and close() is called on the underlying file
descriptor. This bug allows an idle TCP client to prevent a server
from terminating the connection and freeing resources. This patch
fixes the problem by discarding the port queue if the socket is closed
when {linger, {true, 0}} is set.
|
|
Up till now all send errors have been translated into a generic
{error, closed}. This patch allows {error, econnreset} to be
returned on send errors when it is detected that the TCP peer
has sent an RST.
|
|
An ECONNRESET is a socket error which tells us that a TCP peer has sent
an RST. The RST indicates that they have aborted the connection and
that the payload we have received should not be considered complete. Up
until now, the implementation of TCP in inet_drv.c has hidden the
receipt of the RST from the user, treating it as though it was just
a FIN terminating the read side of the socket.
There are many cases where user code needs to be able to distinguish
between a socket that was closed normally and one that was aborted.
Setting the option {show_econnreset, true} enables the user to receive
ECONNRESET errors on both active and passive sockets.
A connected socket returned from gen_tcp:accept/1 will inherit the
show_econnreset setting of the listening socket.
By default this option is set to {show_econnreset, false}.
Note that this patch only enables the reporting of ECONNRESET when
the socket is being read from. It does not report ECONNRESET (or
EPIPE) when the user tries to write to a connection when an RST
has already been received. Currently the TCP implementation in
inet_drv.c hides all such send errors from the user in favour
of returning {error, close}. A separate patch will be needed to
enable the reporting of such errors.
|
|
* egil/fix-internal_hash-list-opt:
erts: Fix faulty list optimization in make_internal_hash
|
|
Reported-by: Rory Byrne
|
|
* henrik/typo-fix-branch:
Fixing typo
|
|
To make it easier to parse stack trace information from tools
|
|
* egil/cuddle-tests:
erts: Remove remaining ?line macros in trace_meta_SUITE
erts: Relax trace_meta_SUITE:on_and_off_test/1
erts: Remove ?line macro in trace_meta_SUITE:on_and_off_test/1
kernel: Remove remaining ?line macros in gen_tcp_misc_SUITE
kernel: Relax gen_tcp_misc_SUITE don't wait for timeout
kernel: Relax test gen_tcp_misc_SUITE:wrapping_oct/1
|
|
Also, fixed some confusing indentations and whitespace errors.
This commit only has whitespace changes and removal of ?line macros.
|
|
|
|
|
|
Thanks to Nathanael Bartley
|
|
* jh/freebsdcpu/OTP-12796:
os_mon: Comply with C89 standard
os_mon: Update docs for FreeBSD
os_mon: Implement cpu_sup:util/0,1 for FreeBSD
|
|
OTP-12797
|
|
* vinoski/enif-raise-exception/OTP-12770:
Add enif_raise_exception
Enhance enif_has_pending_exception
Fix for enif_schedule_nif and exceptions
Conflicts:
erts/doc/src/erl_nif.xml
|
|
* sverk/nif-map-docs:
erts: Cleanup fsummary lines in erl_nif docs
erts: Fix alphabetic order in erl_nif doc
erts: Add docs for map functions in nif API
erts: Rename ErlNifMapIteratorEntry enums
|
|
* legoscia/dialyzer/cache-hipe-binaries/OTP-12779:
Dialyzer to cache results of HiPE compilation
Change hipe_bifs:system_crc/1 to hipe_bifs:system_crc/0
|
|
by removing all full stop.
|
|
enif_make_reverse_list was at the wrong place
|
|
|
|
* richcarl/warnings-by-default/OTP-12781:
stdlib: Use warning channel in test qlc_SUITE:otp_6964/1
stdlib: Fix testcase for qlc_SUITE
kernel: Fix code_SUITE with respect to new logger default
Map error logger warnings to warning messages by default
|
|
The macro HIPE_SYSTEM_CRC used to contain a hidden cookie from the VM
that generated hipe_literals.hrl. This means that BEAM files containing
that macro would be tied to a particular version of the VM.
Change hipe_bifs:system_crc such that it doesn't require a hidden cookie
to return the desired value.
|
|
To differentiate between first/last map entry
and head/tail which is before/after first/last map entry.
|
|
Add enif_raise_exception function to allow NIFs to raise error
exceptions holding any Erlang terms. This does not replace or
deprecate the enif_make_badarg function, though, because raising
badarg errors is so idiomatic in NIFs. Reimplement enif_make_badarg on
top of enif_raise_exception. Add new tests for enif_raise_exception
for both normal and dirty NIFs. Add documentation for
enif_raise_exception.
|
|
Sverker Eriksson came up with the following idea: to handle a future
ability for NIFs to raise more than just badarg exceptions, modify the
recently-added enif_has_pending_exception function to take a second
argument: a pointer to ERL_NIF_TERM. If this argument is a null
pointer, ignore it. Otherwise, if the first argument, an ErlNifEnv*,
has an associated exception, set the pointed-to ERL_NIF_TERM of the
second argument to the value of the exception term. Add new tests and
documentation for this modification.
|
|
Fix a place where part of the implementation of enif_schedule_nif was
not using the ErlNifEnv exception_thrown field when it should have
been.
Also make the result of enif_schedule_nif return false when passed to
enif_is_exception, and add an assertion for this to the nif_SUITE.c
tests.
|
|
Authors: Wasif Malik and Johannes Huning
|
|
* egil/cuddle-tests:
erts: Relax monitor_SUITE:mixer/1
erts: Refactor monitor_SUITE:mixer/1
stdlib: Minor change of unicode_SUITE
stdlib: Relax iterations in binary_module_SUITE:random_ref_sr_comp/1
Remove ?line macro in binary_module_SUITE:random_ref_sr_comp/1
stdlib: Relax iterations in binary_module_SUITE:random_ref_comp/1
stdlib: Remove ?line macro in binary_module_SUITE:random_ref_comp/1
stdlib: Relax filesize of io_proto_SUITE:unicode_options_gen/1
stdlib: Relax rand_SUITE timeout
debugger: Relax test map_SUITE:t_guard_receive_large/1
tools: Relax lcnt test time
stdlib: ets_SUITE cuddling
|
|
* jlouis/cocci-noderef-fixes:
Correct usage of sizeof() for pointer types
OTP-12771
|
|
|
|
Remove ?line macro.
|
|
* vinoski/ds-timer-wheel-fix:
Avoid timer wheel work in dirty schedulers
|
|
* rickard/timer-improvement/OTP-12650:
Fix bug causing timeout to overwrite exit instruction
Doc fixes
|
|
* rickard/fix_alloc_stat_fix/OTP-12766:
Fix statistics reported about fix alloc types
|
|
|
|
|
|
|
|
Also fix and document the broken +We option.
|
|
* bk/configure-arch-ppc64le/OTP-12761:
Add architecture ppc64le architecture as a ppc64
|
|
ppc64le is a new arch/ABI that runs on IBM POWER processor starting at POWER8
processor, and it should be listed as a ppc64, mainly for hipe enablement.
For more information about this new arch/ABI, please check the documents at:
https://www-03.ibm.com/technologyconnect/tgcm/TGCMServlet.wss?alias=OpenPOWER
|
|
|
|
This reverts commit 4c4d7fa40e5fb59854724ce74b8aa3546525cb90.
This pr is causing some test failures that were missed at first.
|
|
* richcarl/warnings-by-default:
Map error logger warnings to warning messages by default
OTP-12755
|
|
* mikpe/erl_child_setup-android-breakage:
erl_child_setup.c: fix Android breakage
OTP-12751
|
|
Dirty schedulers are limited in the type of work they can
perform. Make sure they do not participate in any work or make any
function calls related to timer wheels.
|
|
Also fix and document the broken +We option.
|
|
This reverts commit e09dd66dc4d89c62ddfd8c19791f9678d5d787c6.
|
|
Given some pointer *x, calling sizeof(x) will give us
the size of the pointer (4/8 bytes) not the size fo the
underlying dereferenced structure. Use coccinelle to
search for these occurrences in the source code, and
correct them one by one. In the case of
erl_node_tables.c, the erts_snprintf() calls used a
much too small buffer.
- run_erl.c: Use the size of the signal type, not
its pointer.
- erl_node_tables.c: Use the size of the _BUFFER in
erts_snprintf() to make sure we can use the full space.
|
|
If the driver queue is empty, or the user is requesting a 'read'
shutdown, then the shutdown() syscall is performed synchronously, as
per the old version of shutdown/2.
However, if the user is requesting a 'write' or 'read_write' shutdown,
and there is data in the driver queue for the socket, then the
shutdown() syscall is delayed and handled asynchronously when the
driver queue is written out.
This version of shutdown solves a number of issues with the old
version. The two main solutions it offers are:
* It doesn't block when the TCP peer is idle or slow. This is the
expected behaviour when shutdown() is called: the caller needs
to be able to continue reading from the socket, not be prevented
from doing so.
* It doesn't truncate the output. The current version of
gen_tcp:shutdown/2 will truncate any outbound data in the driver
queue after about 10 seconds if the TCP peer is idle of slow. Worse
yet, it doesn't even inform anyone that the data has been
truncated: 'ok' is returned to the caller; and a FIN rather than
an RST is sent to the TCP peer.
For a detailed description of all the problems with the old version
of shutdown, please see the EEP Light that was written to justify
this patch.
|