aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/test
AgeCommit message (Collapse)Author
2018-12-14[socket-nif|test] Correct the (api) connect timeout test caseMicael Karlberg
Assumed the wrong success value ({ok, _} instead of ok) for the api-to-connect-tcp test case. OTP-14831
2018-12-13erts: Fix possible heap corruption getting atomicsTomas Abrahamsson
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.
2018-12-13Merge branch 'maint'Björn Gustavsson
* maint: Fix reading beyond end of bignum in integer squaring
2018-12-13Fix reading beyond end of bignum in integer squaringBjörn Gustavsson
The multiplication of two bignums is specially optimized when the two operands have the same address, because squaring can be done more efficiently than multiplication of two arbitrary integers. That is, expressions such as `I * I` will be calculated by squaring the value of `I`. The optimized function for squaring would read one word beyond the end of the bignum in the last iteration of a loop. The garbage value would never be used. In almost all circumstances that would be harmless. Only if the read word happened to fall on the start of an unmapped page would the runtime crash. That is unlikely to happen because most bignums are stored on a process heap, and since the stack is located at the other end of the block that the heap is located in, the word beyond the end of bignum is guaranteed to be readable.
2018-12-07[socket-nif|test] ttest improvementsMicael Karlberg
Added a ttest lib module for some common functions. Added a process (server handler and reader processes) stats printouts. So far only used by the server. There is still a "leak". Its a term leak. Some of the functions take a ref as argument (recv, send and accept for instance). This is stored internally, by way of a call to the enif_make_copy, in order to be used later in a select call. Its not "released" though, until the environment is released, which happens when the socket dtor callback function is called. Possible solution: We need to keep "temporary" environments (one for each of the queues), which we can clear (basically we need two, one that is currently used for new ref's and one for the old ref's). OTP-14831
2018-12-06Merge branch 'maint'Lukas Larsson
Conflicts: erts/emulator/beam/erl_process.c
2018-12-06Merge branch 'lukas/OTP-21.1.1/scheduler_pollset/OTP-15475' into maintLukas Larsson
* lukas/OTP-21.1.1/scheduler_pollset/OTP-15475: erts: Move fds with active true behaviour to own pollset erts: Fix lists_member_2 reduction count erts: Allow code_model_small to be set in xcomp setting erts: Implement delay_send using timer instead of poll erts: Optimize driver_set_timer(0) to fire at once erts: Optimize the inet driver multi timers for one timer erts: Move all inet tcp CONNECTED timers to multi timer erts: Add erts_io_notify_port_task_executed to check_io msacc state erts: Add pre-alloc to ALLOC msacc state erts: Make thr prgr wakeup current or sched 1 erts: Pass thread progress data where possible
2018-12-06erts: Move fds with active true behaviour to own pollsetLukas Larsson
At start of the VM a poll-set that the schedulers will check is created where fds that have triggered many (at the moment, many means 10) times without being deselected inbetween. In this scheduler specific poll-set fds do not use ONESHOT, which means that the number of syscalls goes down dramatically for such fds. This pollset is introduced in order to handle fds that are used by the erlang distribution and that never change their state from {active, true}. This pollset only handles ready_input events, ready_output is still handled by the poll threads. During overload, polling the scheduler poll-set is done on a 10ms timer.
2018-12-05[socket-nif|test] Added the proper time-test codeMicael Karlberg
2018-12-05[socket-nif|test] Fixed the test suiteMicael Karlberg
The ping-pong merge had some problems...
2018-12-03Merge branch 'maint'Sverker Eriksson
2018-12-03Merge branch 'sverker/erts/cuddle-driver_SUITE' into maintSverker Eriksson
* sverker/erts/cuddle-driver_SUITE: erts: Fix faulty assert in driver_SUITE erts: Improve driver_SUITE:smp_select
2018-11-26Merge branch 'maint'Sverker Eriksson
2018-11-23erts: Fix bug in countersSverker Eriksson
Wow, that could have been embarrassing.
2018-11-22Merge branch 'maint'Sverker Eriksson
2018-11-22erts: Fix faulty assert in driver_SUITESverker Eriksson
Set drv_use_singleton.fd_stop_select to -2 in start() as it's only used by driver_SUITE:driver_select_use.
2018-11-22Merge branch 'bmk/20181115/nififying_inet_tests/OTP-14831' into ↵Micael Karlberg
bmk/20180918/nififying_inet/OTP-14831
2018-11-21erts: Add counters:put/3Sverker Eriksson
2018-11-20erts: Improve driver_SUITE:smp_selectSverker Eriksson
to better detect an actual missing ready_input event on slow machines (valgrind) and without wasting time with long sleep on fast machines.
2018-11-16erts: Refactor out erts_test_utils from node_container_SUITESverker Eriksson
to be usable by other application tests.
2018-11-16[socket-nif|test] Attempt to "fix" the api_to_connect_tcpX test casesMicael Karlberg
Attempt to fix the the api_to_connect_tcp[4|6] test cases. On some linux versions (Ubuntu 14), the backlog seems to not work. No luck... OTP-14831
2018-11-15[socket-nif|test] Add test case for socket closeMicael Karlberg
Added a socket close (actually shutdown(write)) for recv and recvmsg for tcp. OTP-14831
2018-11-15Merge branch 'maint'Sverker Eriksson
2018-11-15erts: Add new module 'counters'Sverker Eriksson
2018-11-15erts: Add new module 'atomics'Sverker Eriksson
2018-11-06[socket-nif|test] Add UDP ping-pong test casesMicael Karlberg
Added ping-pong test cases for UDP, small and medium, using the sendto/recvfrom and sendmsg/recvmsg functions. OTP-14831
2018-11-06Merge branch 'maint'Björn Gustavsson
* 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
2018-11-06Add a persistent term storageBjörn Gustavsson
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.)
2018-11-05[socket-nif|test] Some minor restructure of the ping-pong casesMicael Karlberg
Some minor restructure of the ping-pong test cases in order to not have duplicate the send and receive fun's. OTP-14831
2018-11-05[socket-nif|test] Add sendmsg/recvmsg ping-pong test casesMicael Karlberg
Added New ping-pong test cases using the sendmsg and recvmsg functions. OTP-14831
2018-11-02[socket-nif|test] Biffer init and message sizes in ping-pong caseMicael Karlberg
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
2018-11-01[sock-nif|test] Add a ping-pong test caseMicael Karlberg
We got some kind of send hang...
2018-10-30[socket-nif] Add a send and receive chunks test caseMicael Karlberg
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
2018-10-30[socket-nif|test] Make more use of the evaluator funcsMicael Karlberg
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
2018-10-29[socket-nif|test] Make more use of the evaluator funcsMicael Karlberg
Use the evaluator functions for communication between processes also for communication between "slave" processes (on other nodes). OTP-14831
2018-10-29[socket-nif|test] All test cases now using evaluator moduleMicael Karlberg
All test cases has been updated using the new evaluator module (and their macros). OTP-14831
2018-10-26[socket-nif|test] Added "proper" evaluator moduleMicael Karlberg
Add a "proper" evaluator module and adapted a couple of test cases to use that instead. OTP-14831
2018-10-26[socket-nif|test] Updated socket (remote) close test case(s)Micael Karlberg
Updated the socket (remote) close test case(s) sc_rc_receive_response_tcp. Now has three (remote) client connecting. OTP-14831
2018-10-25[socket-nif|test] Updated socket (local) close test case(s)Micael Karlberg
Updated the socket (local) close test case(s) sc_lc_acceptor_response_tcp with the new evaluator interface functions. OTP-14831
2018-10-25[socket-nif|test] Updated socket (remote) close test case(s)Micael Karlberg
Updated the socket (remote) close test case(s) sc_rc_receive_response_tcp with the new evaluator interface functions. OTP-14831
2018-10-25[socket-nif|test] Updated socket (local) close test case(s)Micael Karlberg
Updated the socket (local) close test case(s) sc_lc_receive_response_udp with the new evaluator interface functions. OTP-14831
2018-10-25[socket-nif|test] Updated socket (local) close test case(s)Micael Karlberg
Updated the socket (local) close test case(s) sc_lc_receive_response_tcp with the new evaluator interface functions. OTP-14831
2018-10-25[socket-nif|test] Updated socket close test case(s)Micael Karlberg
Updated the socket close test case(s) sc_cpe_socket_cleanup with the new evaluator interface functions. OTP-14831
2018-10-24[socket-nif|test] Updated the basic timeout multi accept test caseMicael Karlberg
Updated the basic api timeout test case(s) api_to_maccept_tcp with the new evaluator interface functions. OTP-14831
2018-10-24[socket-nif|test] Updated the basic timeout connect test caseMicael Karlberg
Updated the basic api timeout test case api_to_connect_tcp with the new evaluator interface functions. OTP-14831
2018-10-24[socket-nif|test] Updated the basic option ctrl proc test caseMicael Karlberg
Updated the basic api option test case api_opt_simple_otp_controlling_process with the new evaluator interface functions. OTP-14831
2018-10-24Merge branch 'maint'Björn Gustavsson
* 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
2018-10-24[socket-nif|test] Updated the basic send and recv tcp test casesMicael Karlberg
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
2018-10-23[socket-nif|test] Evaluator interface functionsMicael Karlberg
Added simple evaluator interface functions, so that it is simple for evaluators to interact (and unified). Only two test cases so far... OTP-14831
2018-10-23[socket-nif|test] Add two "remote close" test casesMicael Karlberg
Added two remote close socket closure test cases (for IPv4 TCP): sc_rc_recv_response_tcp4 and sc_rc_recvmsg_response_tcp4. OTP-14831