Age | Commit message (Collapse) | Author |
|
* maint:
Implement a tab for persistent terms in crashdump viewer
Add tests of persistent terms for crashdump_viewer
Add a persistent term storage
Refactor releasing of literals
Extend the sharing-preserving routines to optionally copy literals
Conflicts:
erts/emulator/Makefile.in
erts/emulator/beam/erl_process_dump.c
erts/preloaded/ebin/erts_internal.beam
erts/preloaded/ebin/init.beam
lib/sasl/src/systools_make.erl
|
|
Persistent terms are useful for storing Erlang terms that are never
or infrequently updated. They have the following advantages:
* Constant time access. A persistent term is not copied when it is
looked up. The constant factor is lower than for ETS, and no locks
are taken when looking up a term.
* Persistent terms are not copied in garbage collections.
* There is only ever one copy of a persistent term (until it is
deleted). That makes them useful for storing configuration data
that needs to be easily accessible by all processes.
Persistent terms have the following drawbacks:
* Updates are expensive. The hash table holding the keys for the
persistent terms are updated whenever a persistent term is added,
updated or deleted.
* Updating or deleting a persistent term triggers a "global GC", which
will schedule a heap scan of all processes to search the heap of all
processes for the deleted term. If a process still holds a reference
to the deleted term, the process will be garbage collected and the
term copied to the heap of the process. This global GC can make the
system less responsive for some time.
Three BIFs (implemented in C in the emulator) is the entire
interface to the persistent term functionality:
* put(Key, Value) to store a persistent term.
* get(Key) to look up a persistent term.
* erase(Key) to delete a persistent term.
There are also two additional BIFs to obtain information about
persistent terms:
* info() to return a map with information about persistent terms.
* get() to return a list of a {Key,Value} tuples for all persistent
terms. (The values are not copied.)
|
|
Some minor restructure of the ping-pong test cases in order
to not have duplicate the send and receive fun's.
OTP-14831
|
|
Added New ping-pong test cases using the sendmsg and recvmsg functions.
OTP-14831
|
|
The ping-pong test case(s) now initiates the socket
buffers before they are connected (server: before listen is
called on the listen socket and client: before connect is called).
Also, we now include a length indicator in the messages, so
that we know how much to read.
OTP-14831
|
|
We got some kind of send hang...
|
|
The send and recv test case triggered a two bugs. One was
that there was no re-selecting when only a portion of the data
was received (which meant that we stopped reading).
Also, the wrong 'current' (writer) was reset when demonitor
current reader after a successful read (which meant that
future readers would never have been monitored).
OTP-14831
|
|
Make more use the evaluator functions for communication between
processes. Specifically, between the server and its handler processes
in the sc_rc_receive_response_tcp test cases(s).
OTP-14831
|
|
Use the evaluator functions for communication between processes
also for communication between "slave" processes (on other nodes).
OTP-14831
|
|
All test cases has been updated using the new evaluator module
(and their macros).
OTP-14831
|
|
Add a "proper" evaluator module and adapted a couple
of test cases to use that instead.
OTP-14831
|
|
Updated the socket (remote) close test case(s) sc_rc_receive_response_tcp.
Now has three (remote) client connecting.
OTP-14831
|
|
Updated the socket (local) close test case(s) sc_lc_acceptor_response_tcp
with the new evaluator interface functions.
OTP-14831
|
|
Updated the socket (remote) close test case(s) sc_rc_receive_response_tcp
with the new evaluator interface functions.
OTP-14831
|
|
Updated the socket (local) close test case(s) sc_lc_receive_response_udp
with the new evaluator interface functions.
OTP-14831
|
|
Updated the socket (local) close test case(s) sc_lc_receive_response_tcp
with the new evaluator interface functions.
OTP-14831
|
|
Updated the socket close test case(s) sc_cpe_socket_cleanup
with the new evaluator interface functions.
OTP-14831
|
|
Updated the basic api timeout test case(s) api_to_maccept_tcp
with the new evaluator interface functions.
OTP-14831
|
|
Updated the basic api timeout test case api_to_connect_tcp
with the new evaluator interface functions.
OTP-14831
|
|
Updated the basic api option test case
api_opt_simple_otp_controlling_process
with the new evaluator interface functions.
OTP-14831
|
|
* maint:
beam_lib: Remove obsolete module() from the beam() type
hipe: Don't use beam_lib:info/1 with an atom as filename
Honor the max heap size when copying literals after purging
|
|
Updated the basic api test cases api_b_send_and_recv_tcp4 and
api_b_sendmsg_and_recvmsg_tcp4 with the new evaluator interface
functions.
OTP-14831
|
|
Added simple evaluator interface functions, so that it is
simple for evaluators to interact (and unified).
Only two test cases so far...
OTP-14831
|
|
Added two remote close socket closure test cases (for
IPv4 TCP): sc_rc_recv_response_tcp4 and sc_rc_recvmsg_response_tcp4.
OTP-14831
|
|
Add test cases for tcp local socket close for the accept function.
OTP-14831
|
|
Add test cases for udp local socket close for UDP recvfrom and
recvmsg.
OTP-14831
|
|
The receive response local close tcp cases was extended
wityh two more handler (readers).
OTP-14831
|
|
Add name to evaluator printouts. Also added timetraps to all test-
cases to shorten the time to wait in case a test case fails.
OTP-14831
|
|
|
|
OTP-14831
|
|
When a module has been purged from memory, any literals belonging
to that module will be copied to all processes that hold references
to them.
The max heap size limit would be ignored in the garbage collection
initiated when copying literals to a process. If the max heap size
was exceeded, the process would typically be terminated in the
following garbage collection.
Since the process would be killed anyway later, kill the process
before copying a literal that would make it exceed its max heap
size.
While at it, also fix a potential bug in `erlang:garbage_collect/0`.
If it was found that the max heap sized had been exceeded while
executing `erlang:garbage_collect/0`, the process would enter a
kind of zombie state instead of being properly terminated.
|
|
Signed-off-by: Peter Lemenkov <[email protected]>
|
|
|
|
|
|
* maint:
Improve trapping in lists:reverse/2
Fix unsafe use of lists:reverse/1
|
|
If the process had more free space than reductions it could run a
lot longer than it was supposed to. It didn't honor the number of
reductions going in either, nor did it bump reductions when
returning its result or erroring out.
This commit also removes this function from a work function in
scheduler_SUITE as it's extremely sensitive to the number of
reductions spent in the test, causing
equal_and_high_with_part_time_max to fail on some machines.
|
|
* sverker/enif-cancel-select/OTP-15095:
erts: Add ERL_NIF_SELECT_CANCEL flag for enif_select
|
|
* maint:
Updated OTP version
Update release notes
Update version numbers
kernel: Fix missing abort_connection in net_kernel
Prevent inconsistent node lists
Fix an endless rescheduling loop when a process is executing process_info(self(), ...)
|
|
* maint-21:
Updated OTP version
Update release notes
Update version numbers
kernel: Fix missing abort_connection in net_kernel
Prevent inconsistent node lists
Fix an endless rescheduling loop when a process is executing process_info(self(), ...)
|
|
If net_kernel "forgets" to abort a connection (as it currently might),
the garbage collection of a distribution entry could cause node lists
to enter an inconsistent state.
|
|
|
|
|
|
* maint:
Fix incoming suspend monitor down
|
|
* 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.
|
|
* dotsimon/ref_ordering_bug/OTP-15225:
Fixed #Ref ordering bug
Test #Ref ordering in lists and ets
|
|
|
|
* maint:
Fixed #Ref ordering bug
Test #Ref ordering in lists and ets
|
|
|
|
|