Age | Commit message (Collapse) | Author |
|
* lukas/erts/dist-optimize-large-data/PR-2291/OTP-15926:
erts: Don't copy binary data from dist data
erts: Move copy of payload to receiving process
|
|
* sverker/system_info-procs-bug/ERL-979/OTP-15909:
Fix fatal bug in erts_proc_sig_signal_size
|
|
called by
erlang:process_info(memory)
erlang:system_info(procs)
crash dump
break menu
Will crash VM if process has a pending monitor DOWN signal in its queue.
|
|
|
|
|
|
* john/erts/seq_trace-sigq-clearing/OTP-15704:
erts: Handle all signal types when clearing seq_trace token
|
|
We walk through all signal queues in the system when clearing
seq_trace, so we must be prepared to encounter all kinds of
signals.
|
|
Since we no schedule free processes multiple times, pending
signals can be from free as well as current processes.
|
|
* maint:
Fix reception of resume signal on process executing dirty
|
|
If a suspend/resume signal pair was sent to a process while it
was executing dirty the resume counter on the process got into
an inconsistent state. This in turn could cause the process
to enter a suspended state indefinitely.
|
|
The reason in EXIT and DOWN may be arbitrarily large,
so we yield and allow other processes to execute while
encoding and sending the signals over the distribution.
|
|
|
|
|
|
The dist messages EXIT, EXIT2 and MONITOR_DOWN have been
updated with new versions that send the reason term as
part of the payload of the message instead of as part
of the control message.
This allows the decode of the reason to be done by the
receiving process instead of the dist entry which in turn
makes it possible for multiple decodes to be done in
parallel.
This change is done in order to make it easier to fragment
the potentially large payload of EXIT, EXIT2 and MONITOR_DOWN
into multiple distribution messages.
OTP-15611
|
|
All of the Red-Black Tree _yielding functions have been
updated to work with reductions returned by the called
function instead of yielding on each element.
|
|
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.
|
|
* rickard/fix-suspend-monitor-down/OTP-15237/ERL-704:
Fix incoming suspend monitor down
|
|
An incoming suspend monitor down wasn't handled correct when the
local monitor half had been removed with an emulator crash as result.
|
|
A lot of erts internal messages used behind APIs to create
non-blocking calls, e.g. port_command, would cause the seq_trace
token to be cleared from the caller when it should not.
This commit fixes that and adds asserts that makes sure
that all messages sent have to correct token set.
Fixes: ERL-602
|
|
Seen symptom:
handle_process_info() called with is_alive=1 on exiting process,
reading broken Process.u.initial.module atom
overwritten by Process.u.terminate pointer.
Solution:
Let erts_proc_sig_handle_incoming() do nothing if process is
already exiting.
|
|
* Remove 'last' arg to sig_enqueue_trace_cleanup
* Only notify 'rp' if enqueue succeeded
|
|
broken on master by
613cde66c25464121f2f6dace99782bad0e07d9b
Scenario:
proc_queue_signal() fails to send switched pending signal
due to state & ERTS_PSFLG_FREE,
and then calls erts_proc_sig_send_monitor_down() to enqueue to self
followed by sig_enqueue_trace_cleanup() that destroyed 'next' pointer
of enqueued signal.
Solution:
Switch order and do sig_enqueue_trace_cleanup() first.
|
|
* rickard/suspend/OTP-14964:
Fix erts_try_lock_sig_free_proc()
Update etp
Replace previous suspend in setnode/3
New process suspend implementation based on async signaling
Teach HiPE to yield from receive
|
|
|
|
Bug introduced in master by
613cde66c25464121f2f6dace99782bad0e07d9b
|
|
from ensure_dirty_proc_handled
as an outline function callable from inline functions.
|
|
* rickard/process_info/OTP-14966:
Fix scheduled process_info() 'status' request
Fix handling of process-info requests in receive
|
|
|
|
If no message/signal is sent (to same destination)
then monitor signal is flushed when process is scheduled out.
|
|
|
|
* rickard/process_info/OTP-14966:
Restore merge of signal queues in queue_messages() if main lock is held
Fix message tracing
|
|
|
|
* rickard/process_info/OTP-14966:
New process_info() implementation using signals
|
|
|
|
* rickard/signals/OTP-14589:
Fix seq trace
Fix bad assert
|
|
|
|
jhogberg/john/erts/any-term-as-seq_trace-label/OTP-14899
Lift the type restrictions on seq_trace token labels
|
|
|
|
|
|
OTP-14899
|
|
|
|
|
|
Communication between Erlang processes has conceptually always been
performed through asynchronous signaling. The runtime system
implementation has however previously preformed most operation
synchronously. In a system with only one true thread of execution, this
is not problematic (often the opposite). In a system with multiple threads
of execution (as current runtime system implementation with SMP support)
it becomes problematic. This since it often involves locking of structures
when updating them which in turn cause resource contention. Utilizing
true asynchronous communication often avoids these resource contention
issues.
The case that triggered this change was contention on the link lock due
to frequent updates of the monitor trees during communication with a
frequently used server. The signal order delivery guarantees of the
language makes it hard to change the implementation of only some signals
to use true asynchronous signaling. Therefore the implementations
of (almost) all signals have been changed.
Currently the following signals have been implemented as true
asynchronous signals:
- Message signals
- Exit signals
- Monitor signals
- Demonitor signals
- Monitor triggered signals (DOWN, CHANGE, etc)
- Link signals
- Unlink signals
- Group leader signals
All of the above already defined as asynchronous signals in the
language. The implementation of messages signals was quite
asynchronous to begin with, but had quite strict delivery constraints
due to the ordering guarantees of signals between a pair of processes.
The previously used message queue partitioned into two halves has been
replaced by a more general signal queue partitioned into three parts
that service all kinds of signals. More details regarding the signal
queue can be found in comments in the erl_proc_sig_queue.h file.
The monitor and link implementations have also been completely replaced
in order to fit the new asynchronous signaling implementation as good
as possible. More details regarding the new monitor and link
implementations can be found in the erl_monitor_link.h file.
|