Age | Commit message (Collapse) | Author | |
---|---|---|---|
2019-03-25 | Merge branch 'sverker/bug-fixing' | Sverker Eriksson | |
* sverker/bug-fixing: erts: Fix erts_debug:set_internal_state(reds_left) erts: Fix binary_SUITE:cmp_old_impl | |||
2019-03-25 | erts: Fix binary_SUITE:cmp_old_impl | Sverker Eriksson | |
since DFLAG_BIG_CREATION became mandatory in 321dc6ee0241f802c940def174c0a77262e11f21. | |||
2019-03-25 | erts: Yield when exiting/free process is suspended by de | Lukas Larsson | |
2019-03-25 | Fix tests to work better in debug emulator | Lukas Larsson | |
2019-03-25 | erts: Skip heavy process tab tests in debug emu | Lukas Larsson | |
2019-03-25 | Revert "erts: Always run fds check after each testcase" | Lukas Larsson | |
This reverts commit 1eb0a2c47edd036731ee1e4e4f7b5bdfc7d576fa. | |||
2019-03-25 | erts: Always run fds check after each testcase | Lukas Larsson | |
2019-03-25 | erts: Always stop any testnodes before testcase exits | Lukas Larsson | |
This needs to be done in order for automatic fd leak checking to work properly. | |||
2019-03-25 | erts: Add crash dumping of EXITING and FREE processes | Lukas Larsson | |
2019-03-25 | erts: Fix verify_nc in distribution suite | Lukas Larsson | |
When the calling process is trapping exits a stray message will end up in the mailbox which is problematic. This change uses a monitor instead. | |||
2019-03-25 | erts: Fix atom16 testcase after dist frag impl | Lukas Larsson | |
2019-03-22 | Merge branch 'john/erts/fix-badarg-fixed_apply' | John Högberg | |
* john/erts/fix-badarg-fixed_apply: erts: Include argument list on badarg in fixed_apply | |||
2019-03-21 | Merge 'sverker/master/enif_whereis_pid-dirty-dtor/OTP-15694' | Sverker Eriksson | |
* sverker/master/enif_whereis_pid-dirty-dtor: erts: Add test of enif_whereis* from resource destructor erts: Simplify nif_SUITE:nif_whereis* tests erts: Schedule resource destructors always | |||
2019-03-21 | Merge branch 'maint' | Rickard Green | |
* maint: Fix reception of resume signal on process executing dirty | |||
2019-03-21 | erts: Include argument list on badarg in fixed_apply | John Högberg | |
2019-03-21 | Merge branch 'bmk/20190320/esock/test_case_adjustements' | Micael Karlberg | |
2019-03-20 | Fix reception of resume signal on process executing dirty | Rickard Green | |
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. | |||
2019-03-20 | [socket|test] Improve test case precondition | Micael Karlberg | |
Added a fun for precondition check run before each test case is actually run. The primary reason for this is the api_to_connect test case, which does not work for a number of platforms. Also, moved the IPv6 check into this fun (instead of an explicit skip in the test case fun) for the IPv6 test cases. | |||
2019-03-20 | Merge branch 'sverker/nif-test-cuddle' | Sverker Eriksson | |
2019-03-19 | Merge branch 'sverker/enif_whereis_pid-dirty-dtor' | Sverker Eriksson | |
into sverker/master/enif_whereis_pid-dirty-dtor | |||
2019-03-19 | erts: Add test of enif_whereis* from resource destructor | Sverker Eriksson | |
2019-03-19 | erts: Simplify nif_SUITE:nif_whereis* tests | Sverker Eriksson | |
and change some argc checks from badarg to assert. | |||
2019-03-19 | erts: Schedule resource destructors always | Sverker Eriksson | |
to run user NIF code in a more known execution context. Fixes problems like user calling enif_whereis_pid() in destructor which may need to release process main lock in order to lock reg_tab. | |||
2019-03-18 | Merge branch 'bmk/20190312/linked_test_procs' | Micael Karlberg | |
2019-03-15 | erts: Fix some racy tests | Sverker Eriksson | |
Wait for resource-holding processes to garbage collect before exiting to know destructors have been called. | |||
2019-03-13 | Merge pull request #2177 from bjorng/bjorn/erts/tail-recursive-bifs | Björn Gustavsson | |
Optimize tail-recursive calls of BIFs OTP-15674 | |||
2019-03-13 | Merge branch 'bmk/20190301/cleanup_through_macro_abuse/OTP-15565' | Micael Karlberg | |
2019-03-12 | [socket|test] Make the evaluator processes linked | Micael Karlberg | |
If a test case timed out, all processes created by it should die. But because the 'evaluator' processes where created with spawn_monitor, that was not the case, and therefor, these processes could linger. | |||
2019-03-09 | Optimize tail-recursive calls of BIFs | Björn Gustavsson | |
BEAM currently does not call BIFs at the end of a function in a tail-recursive way. That is, when calling a BIF at the end of a function, the BIF is first called, and then the stack frame is deallocated, and then control is transferred to the caller. If there is no stack frame when a BIF is called in the tail position, the loader will emit a sequence of three instructions: first an instruction that allocates a stack frame and saves the continuation pointer (`allocate`), then an instruction that calls the BIF (`call_bif`), and lastly an instruction that deallocates the stack frame and returns to the caller (`deallocate_return`). The old compiler would essentially allocate a stack frame for each clause in a function, so it would not be that common that a BIF was called in the tail position when there was no stack frame, so the three-instruction sequence was deemed acceptable. The new compiler only allocates stack frames when truly needed, so the three-instruction BIF call sequence has become much more common. This commit introduces a new `call_bif_only` instruction so that only one instruction will be needed when calling a BIF in the tail position when there is no stack frame. This instruction is also used when there is a stack frame to make it possible to deallocate the stack frame **before** calling the BIF, which may make a subsequent garbage collection at the end of the BIF call cheaper (copying less garbage). The one downside of this change is that the function that called the BIF will not be included in the stack backtrace (similar to how a tail-recursive call to an Erlang function will not be included in the backtrace). That was the quick summary of the commit. Here comes a detailed look at how BIF calls are translated by the loader. The first example is a function that calls `setelement/3` in the tail position: update_no_stackframe(X) -> setelement(5, X, new_value). Here is the BEAM code: {function, update_no_stackframe, 1, 12}. {label,11}. {line,[...]}. {func_info,{atom,t},{atom,update_no_stackframe},1}. {label,12}. {move,{x,0},{x,1}}. {move,{atom,new_value},{x,2}}. {move,{integer,5},{x,0}}. {line,[...]}. {call_ext_only,3,{extfunc,erlang,setelement,3}}. Because there is no stack frame, the `call_ext_only` instruction will be used to call `setelement/3`: {call_ext_only,3,{extfunc,erlang,setelement,3}}. The loader will transform this instruction to a three-instruction sequence: 0000000020BD8130: allocate_tt 0 3 0000000020BD8138: call_bif_e erlang:setelement/3 0000000020BD8148: deallocate_return_Q 0 Using the `call_bif_only` instruction introduced in this commit, only one instruction is needed: 000000005DC377F0: call_bif_only_e erlang:setelement/3 `call_bif_only` calls the BIF and returns to the caller. Now let's look at a function that already has a stack frame when `setelement/3` is called: update_with_stackframe(X) -> foobar(X), setelement(5, X, new_value). Here is the BEAM code: {function, update_with_stackframe, 1, 14}. {label,13}. {line,[...]}. {func_info,{atom,t},{atom,update_with_stackframe},1}. {label,14}. {allocate,1,1}. {move,{x,0},{y,0}}. {line,[...]}. {call,1,{f,16}}. {move,{y,0},{x,1}}. {move,{atom,new_value},{x,2}}. {move,{integer,5},{x,0}}. {line,[...]}. {call_ext_last,3,{extfunc,erlang,setelement,3},1}. Since there is a stack frame, the `call_ext_last` instruction will be used to deallocate the stack frame and call the function: {call_ext_last,3,{extfunc,erlang,setelement,3},1}. Before this commit, the loader would translate this instruction to: 0000000020BD81B8: call_bif_e erlang:setelement/3 0000000020BD81C8: deallocate_return_Q 1 That is, the BIF is called before deallocating the stack frame and returning to the calling function. After this commit, the loader will translate the `call_ext_last` like this: 000000005DC37868: deallocate_Q 1 000000005DC37870: call_bif_only_e erlang:setelement/3 There are still two instructions, but now the stack frame will be deallocated before calling the BIF, which could make the potential garbage collection after the BIF call slightly more efficient (copying less garbage). We could have introduced a `call_bif_last` instruction, but the code for calling a BIF is relatively large and there does not seem be a practical way to share the code between `call_bif` and `call_bif_only` (since the difference is at the end, after the BIF call). Therefore, we did not want to clone the BIF calling code yet another time to make a `call_bif_last` instruction. | |||
2019-03-07 | erts: Add enif_term_type | John Högberg | |
This helps avoid long sequences of enif_is_xxx in code that serializes terms (such as JSON encoders) by letting the user switch on the type. | |||
2019-03-04 | [socket|net] Macro abuse | Micael Karlberg | |
Make use of macro concat magic to simplify declarations. OTP-15565 | |||
2019-03-01 | [socket|test] Quiet logger and ttest improvements | Micael Karlberg | |
Add a quiet logger mode (default) which limits the printouts in the (erlang) shell (the web log will be as verbose as usual). Also added a way to configure the runtime of the ttest cases. | |||
2019-03-01 | [socket|test] Moved old test modules | Micael Karlberg | |
Moved the old socket test modules into its own (temporary?) directory. | |||
2019-03-01 | [net] Fixed name_and_addr_info test case | Micael Karlberg | |
The test case did not consider that the machine might have both IPv4 (inet) and IPv6 (inet6) domain interfaces. OTP-15635 | |||
2019-03-01 | [net|test] Add "proper" test suite | Micael Karlberg | |
Add a (basically) placeholder test suite for the net module. OTP-15635 | |||
2019-02-25 | Merge pull request #2124 from kjellwinblad/kjell/stdlib/iolist_size_trap | Kjell Winblad | |
Make iolist_size/1 yield OTP-15631 | |||
2019-02-25 | Make iolist_size/1 yield | Kjell Winblad | |
The iolist_size/1 function did not yield even if the input list was very long and a call to the function did only consume a single reduction. This commit fixes these problems. | |||
2019-02-22 | Merge branch 'bmk/20190204/socket_as_nif/OTP-14831' | Micael Karlberg | |
2019-02-22 | [socket|test] Some improvements to (esock) ttest | Micael Karlberg | |
Add a quiet mode for ttest which is used when running in a (terminal) shell. Moved the esock-ttest script(s) into their own directory. Minor improvements to the (client) result printout. Also fixed copyright (end) dates. OTP-14831 | |||
2019-02-22 | [socket] Local address on macOS Mojave | Micael Karlberg | |
Fixed how to figure out local address on macOS Mojave. OTP-14831 | |||
2019-02-22 | Merge PR-2147 from sverker/sverker/enif-null-pid/OTP-15011 | Sverker Eriksson | |
Add enif_set_pid_undefined & enif_is_pid_undefined | |||
2019-02-22 | Merge branch ↵ | Lukas Larsson | |
'lukas/erts/fragment-dist-messages/OTP-13397/OTP-15610/OTP-15611/OTP-15612/OTP-15613' * lukas/erts/fragment-dist-messages/OTP-13397/OTP-15610/OTP-15611/OTP-15612/OTP-15613: erts: Add debug dist obuf memory leak check win32: Fix ./otp_build debuginfo_win32 Make ld.sh on windows print better error reason erts: Fix so that externals with creation 0 compare equal to all erts: Expand etp to look for free processes erts: Implement trapping while sending distr exit/down erts: Add ERL_NODE_BOOKKEEP to node tables refc erts: Refactor ErtsSendContext to be ErtsDSigSendContext erts: Add distr testcases for fragmentation erts: Make remote send of exit/2 trap erts: Implement fragmentation of distrubution messages erts: Expand distribution protocol documentation erts: Move reason in dist messages to payload erts: Remove a copy of distribution data payload erts: Yield later during process exit and allow free procs to run erts: Refactor rbt _yielding to use reductions erts: Limit binary printout for %.XT in erts_print | |||
2019-02-22 | erts: Add distr testcases for fragmentation | Lukas Larsson | |
2019-02-22 | erts: Implement fragmentation of distrubution messages | Lukas Larsson | |
2019-02-20 | erts: Add enif_compare_pids | Sverker Eriksson | |
as a macro wrappper around enif_compare | |||
2019-02-20 | erts: Add enif_set_pid_undefined & enif_is_pid_undefined | Sverker Eriksson | |
2019-02-15 | Merge branch 'maint' | Björn Gustavsson | |
* maint: Add persistent_term:get(Key, DefaultValue) Make dialyzer faster for left-associative andalso/orelse expressions | |||
2019-02-14 | Add persistent_term:get(Key, DefaultValue) | Björn Gustavsson | |
https://bugs.erlang.org/browse/ERL-843 | |||
2019-02-11 | Merge branch 'maint' | Sverker Eriksson | |
2019-02-11 | Merge branch 'sverker/map-from-ks-vs-bug/OTP-15567' into maint | Sverker Eriksson | |
* sverker/map-from-ks-vs-bug/OTP-15567: erts: Add test for bug in enif_make_maps_from_arrays erts: Fix bug in erts_map_from_ks_and_vs |