aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/beam
AgeCommit message (Collapse)Author
2018-03-26erts: Include foreign static linked drivers in taintsSverker Eriksson
That is, driver added with config option --enable-static-drivers.
2018-03-26erts: Fix harmless bug in macro IS_DRIVER_VERSION_GESverker Eriksson
harmless until we bump major version
2018-03-20erts: Remove our own NIF modules from "taints"Sverker Eriksson
Dynamic NIF libs and those added with config option --enable-static-nifs are considered as taints.
2018-03-20erts: Refactor erts_static_nif_get_nif_initSverker Eriksson
to return pointer to ErtsStaticNifEntry.
2018-03-20erts: Add dynamic loaded drivers to list of "taints"Sverker Eriksson
2018-03-20Merge branch 'sverker/inline-sys_memcpy'Sverker Eriksson
* sverker/inline-sys_memcpy: erts: Optimize macro DMC_PUSH erts: Make sys_memcpy and friends inline functions
2018-03-20erts: Optimize macro DMC_PUSHSverker Eriksson
to call a common static function dmc_stack_grow() and reduce the code bloat. and did a combined DMC_PUSH2
2018-03-20erts: Make sys_memcpy and friends inline functionsSverker Eriksson
to avoid argument-evaluated-twice bugs like in macro DMC_PUSH. Had to shuffle around some #include and #define to make erl_child_setup build debug target.
2018-03-16mikpe/process_info-1-no-messages/PR-1745/OTP-14986Lukas Larsson
make erlang:process_info/1 not retrieve messages
2018-03-14erts: Fix faulty sys_memcpy of 0 bytesSverker Eriksson
2018-03-13Merge PR-1699 from sverker/hipe-amd64-high-code/OTP-14951Sverker Eriksson
Remove low memory need for HiPE on x86_64
2018-03-13Merge branch 'rickard/dirty-work-gone/OTP-14978'Rickard Green
* rickard/dirty-work-gone/OTP-14978: Reschedule on ordinary scheduler if dirty work is gone
2018-03-13Reschedule on ordinary scheduler if dirty work is goneRickard Green
2018-03-13Merge branch 'rickard/pre-alloc-alignment/OTP-14977'Rickard Green
* rickard/pre-alloc-alignment/OTP-14977: Force 64-bit alignment for pre-allocators unless x86
2018-03-13Force 64-bit alignment for pre-allocators unless x86Rickard Green
2018-03-13Merge branch 'rickard/remove-approx-started/OTP-14975'Rickard Green
* rickard/remove-approx-started/OTP-14975: Remove process start time for crash dumps
2018-03-13Merge branch 'sverker/dict-put-immed-opt/OTP-14976'Sverker Eriksson
* sverker/dict-put-immed-opt: erts: Optimize erlang:put/2 for hash collision lists erts: Optimize erlang:put/2 for immed values erts: Refactor erlang:put/2
2018-03-13Merge branch 'sverker/dist-flags-consolidate'Sverker Eriksson
2018-03-13Merge branch 'sverker/unused-atoms'Sverker Eriksson
2018-03-13erts: Remove unused atomsSverker Eriksson
2018-03-12Merge branch 'john/erts/tuple-arityval-fixes/OTP-14963/ERL-577'John Högberg
* john/erts/tuple-arityval-fixes/OTP-14963/ERL-577: Make doc entry for maximum tuple size reflect reality Assert that sz <= MAX_ARITYVAL in make_arityval(sz)
2018-03-12Merge branch 'john/erts/assert-on-memcpy-memset-etc'John Högberg
* john/erts/assert-on-memcpy-memset-etc: Always use sys_memcpy/cmp/etc instead of plain memcpy/cmp/etc Check the arguments to sys_memcpy and friends
2018-03-10make erlang:process_info/1 not retrieve messagesMikael Pettersson
process_info/1 retrieves a number of properties related to a process, including the list of messages in its mailbox. This is potentially unsafe if the target process has a large number of queued messages: - there is no a priori upper bound on the amount of memory being allocated to hold that list, and - the loop to retrieve the messages is uninterruptible, so the Erlang scheduler where this executes blocks for the duration We've seen process_info/1 bring down heavily loaded nodes on more than one occasion. At least once it appeared to have blocked the Erlang heart process from executing, causing the external heart to kill the VM. Consequently this removes 'messages' from the list of process_info tags to retrieve for process_info/1. Note that process_info/1 still retrieves 'message_queue_len', and process_info/2 can still retrieve 'messages' when asked to. A few places in the OTP libraries need minor adjustments, since they want 'message_queue_len' but compute it from the length of the list of messages.
2018-03-09Always use sys_memcpy/cmp/etc instead of plain memcpy/cmp/etcJohn Högberg
2018-03-09Check the arguments to sys_memcpy and friendsJohn Högberg
Passing NULL is undefined behavior and unconditionally executing these may result in the compiler optimizing away a later NULL check. It can often work since the pointer isn't touched when the length is 0, but it's a major footgun. See ERL-573.
2018-03-07Fix for bug introduced when replacing ERTS_PSFLG_BOUNDRickard Green
Bug introduced in commit fbb10ebc4a37555c7ea7f99e14286d862993976a
2018-03-05erts: Optimize erlang:put/2 for hash collision listsSverker Eriksson
Instead of rebuilding all cons cells before key, just unlink key cell from list with a destructive heap write op. This is safe as these lists never leak out and any new-to-old-heap-refs are preserved.
2018-03-05erts: Remove hipe amd64 code super carrier (exec_mmap)Sverker Eriksson
2018-03-05Assert that sz <= MAX_ARITYVAL in make_arityval(sz)John Högberg
2018-03-05Replace usage of ERTS_PSFLG_BOUNDRickard Green
2018-03-05Remove ERTS_PSFLG_ON_HEAP_MSGQRickard Green
2018-03-02erts: Postpone idle DistEntry until abort is completedSverker Eriksson
2018-03-02erts: Refactor DistEntry.status flags into a stateSverker Eriksson
Just to simplify and get 4 distinctive states IDLE, PENDING, CONNECTED and EXITING. The old possible flag combos were: 0 PENDING CONNECTED CONNECTED|EXITING EXITING The two EXITING states did not serve any purpose other then as a slight optimization in monitor_node(_,false,_) to shortcut EXITING when there can be no monitors.
2018-03-02erts: Optimize dist transcoding toward erl_/jinterfaceSverker Eriksson
to only transcode if output buffer actually contains unsupported BIT_BINARY_EXT or EXPORT_EXT.
2018-03-02erts,kernel: Add dist_util:strict_order_flags/0Sverker Eriksson
to replace DFLAGS_STRICT_ORDER_DELIVERY and remove that compile time dependency.
2018-03-02erts,kernel: Add erts_internal:get_dflags/0Sverker Eriksson
for kernel to ask erts about distribution flags and keep this info in one place.
2018-03-02erts: Correctly ignore +secio trueLukas Larsson
This is a fix for a bug introduced in 22cde2bda
2018-02-28Merge branch 'john/erts/binary-bin_to_list-performance-fix/OTP-14741'John Högberg
* john/erts/binary-bin_to_list-performance-fix/OTP-14741: Replace binary:bin_to_list CIF implementation with binary_to_list
2018-02-27Merge branch 'sverker/master/erts/more-crash-dump-info/OTP-14820'Sverker Eriksson
2018-02-27Merge branch 'sverker/erts/more-crash-dump-info/OTP-14820' into maintSverker Eriksson
* sverker/erts/more-crash-dump-info/OTP-14820: erts,observer: Add port-suspended pids to crash dump erts,observer: Add port states and flags to crash dump erts,observer: Add dirty schedulers to crash dump observer: Refactor get_schedulerinfo1 erts,observer: Add more port info to crash dump erts: Cleanup dump_process_info() erts: Include failing garbing process in crash dump erts: Remove unused args to collect_live_heap_frags erts: Add binary vheap sizes to crash dump
2018-02-26Merge branch 'maint'Lukas Larsson
Conflicts: erts/emulator/beam/erl_trace.c
2018-02-26Merge branch 'lukas/erts/dirty_trace_clean_fix/OTP-14938' into maintLukas Larsson
* lukas/erts/dirty_trace_clean_fix/OTP-14938: erts: Delay cleanup of removed tracer on dirty scheds
2018-02-26Replace binary:bin_to_list CIF implementation with binary_to_listJohn Högberg
binary:bin_to_list had a poor implementation that resulted in excessive garbage collection. binary_to_list is almost identical and has a generally better implementation, so I've replaced binary:bin_to_list's CIF with a thin wrapper around binary_to_list. Granted, binary_to_list has a deprecated indexing scheme, but we're unlikely to ever remote it entirely and it's somewhat easy to move it to the 'binary' module later on.
2018-02-26erts: Delay cleanup of removed tracer on dirty schedsLukas Larsson
It is not simple to do the correct de-allocation on a dirty schedulers, so we just delay it until this process runs on a normal scheduler.
2018-02-26Merge branch 'john/erts/nif-binary-iovec-fixes/OTP-14845/OTP-14931/OTP-14932'John Högberg
* john/erts/nif-binary-iovec-fixes/OTP-14845/OTP-14931/OTP-14932: Suggest using enif_make_new_binary when possible Make enif_make_binary return heap binaries if possible Expand ErlNifBinary by another word for future additions Unconditionally transfer ownership to the created term Tweak asserts and explain why the copy buf doesn't use the tmp obj list Free temporary iovecs through the tmp object list Add a helper function for attaching tmp objects to NIF environments
2018-02-26Make enif_make_binary return heap binaries if possibleJohn Högberg
This does not avoid allocating a ProcBin since we still need to release the binary somehow (and using the tmp obj list is slightly slower since it's an unavoidable off-heap allocation), but it does give us a hard limit on how long said ProcBin will live, which is a lot better than before. OTP-14845
2018-02-26Expand ErlNifBinary by another word for future additionsJohn Högberg
When fixing OTP-14931/14932 we had to settle for a solution that decreased performance in a few corner cases like multiple calls to enif_make_binary, as the other options on the table required extra fields which would have broken ABI compatibility. This is ABI-compatible since the fields are unused and at the end.
2018-02-26Unconditionally transfer ownership to the created termJohn Högberg
This fixes two corner-cases: 1) We will no longer return an invalid term when a binary inspected on environment A is used in enif_make_binary on environment B 2) A double-free in this sequence of events: * enif_alloc_binary(size, &bin); * enif_ioq_enq_binary(ioq, &bin, skip); * enif_make_binary(env, &bin); * enif_make_binary(env, &bin); OTP-14931 OTP-14932
2018-02-26Tweak asserts and explain why the copy buf doesn't use the tmp obj listJohn Högberg
2018-02-26Free temporary iovecs through the tmp object listJohn Högberg
Attaching to a ProcBin is the fastest way to delay the release of an already allocated Binary, but alloc_tmp_obj is a lot faster when starting from scratch since it usually uses temp_alloc.