aboutsummaryrefslogtreecommitdiffstats
path: root/erts
AgeCommit message (Collapse)Author
2018-11-06Merge branch 'bjorn/erts/persistent_terms/OTP-14669' into maintBjörn Gustavsson
* bjorn/erts/persistent_terms/OTP-14669: 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
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-02Merge branch 'john/erts/minusminus_trapping/OTP-15371' into maintJohn Högberg
* john/erts/minusminus_trapping/OTP-15371: Optimize operator '--' and yield on large inputs Inline erts_cmp Clarify a magical allocation size Fix trapping in lists:reverse/2
2018-11-01Merge branch 'maint-20' into maintRickard Green
* maint-20: Updated OTP version Prepare release
2018-11-01Merge branch 'rickard/internal_ref_cmp/OTP-15399/ERL-751' into maintRickard Green
* rickard/internal_ref_cmp/OTP-15399/ERL-751: Fix erts_internal_ref_number_cmp()
2018-10-31Prepare releaseErlang/OTP
2018-10-31Merge branch 'rickard/internal_ref_cmp/OTP-15399/ERL-751' into maint-20Erlang/OTP
* rickard/internal_ref_cmp/OTP-15399/ERL-751: Fix erts_internal_ref_number_cmp()
2018-10-31Fix erts_internal_ref_number_cmp()Rickard Green
2018-10-29Refactor releasing of literalsBjörn Gustavsson
Introudce erts_queue_release_literals() to queue a literal area to be released.
2018-10-29Merge branch 'maint-18' into maintRickard Green
* maint-18: Updated OTP version Prepare release
2018-10-29Merge pull request #1977 from RogierWV/maint/OTP-15389Lukas Larsson
Fix run_erl.c so it compiles on Solaris
2018-10-29Merge branch 'jimdigriz/os_mon/fix_cpu_sup_android/OTP-15387' into maintLukas Larsson
* jimdigriz/os_mon/fix_cpu_sup_android/OTP-15387: Make Erlang's cpu_sup function better on Android SELinux is another cause of MSG_CTRUNC
2018-10-29Optimize operator '--' and yield on large inputsJohn Högberg
The removal set now uses a red-black tree instead of an array on large inputs, decreasing runtime complexity from `n*n` to `n*log(n)`. It will also exit early when there are no more items left in the removal set, drastically improving performance and memory use when the items to be removed are present near the head of the list. This got a lot more complicated than before as the overhead of always using a red-black tree was unacceptable when either of the inputs were small, but this compromise has okay-to-decent performance regardless of input size. Co-authored-by: Dmytro Lytovchenko <[email protected]>
2018-10-26Prepare releaseErlang/OTP
2018-10-26Inline erts_cmpJohn Högberg
This greatly increases the performance of '--'/2 which does a lot of term comparisons.
2018-10-25Clarify a magical allocation sizeDmytro Lytovchenko
2018-10-25Fix trapping in lists:reverse/2John Högberg
The first stage wasn't bounded by reductions, and it bumped far more reductions than it should have due to a logic bug.
2018-10-24Extend the sharing-preserving routines to optionally copy literalsBjörn Gustavsson
In the implementation of the zero-copying term storage, we want to preserve sharing, but not copy literals because the modules holding the literals could be unloaded under our feet.
2018-10-24Merge pull request #1991 from bjorng/bjorn/erts/fix-max_heap_size/OTP-15360Björn Gustavsson
Honor the max heap size when copying literals after purging
2018-10-22Merge branch 'raimo/tcp-close-while-send/maint/ERL-561/OTP-12242' into maintRaimo Niskanen
* raimo/tcp-close-while-send/maint/ERL-561/OTP-12242: Write test case Fix hanging gen_tcp send vs close race Conflicts: erts/preloaded/ebin/prim_inet.beam
2018-10-19Fix hanging gen_tcp send vs close raceRaimo Niskanen
While a gen_tcp send was in progress with filled buffers and slow receiver a close (from another process) would place the port in a half dead state so the port could not signal back to send, that waited for confirmation. The solution is to after some time (5 s) of waiting for send confirmation set a monitor on the port, which detects if the port becomes half dead due to close from another process. The close pending loop has also been improved to use the linger timeout for waiting, and to set a system timeout (arbitrarily selected 3 min) to not wait forever when the other end reads data s l o w l y (tarpitting, kind of).
2018-10-19Honor the max heap size when copying literals after purgingBjörn Gustavsson
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.
2018-10-18Merge branch 'maint-20' into maintHans Nilsson
* maint-20: Updated OTP version Prepare release
2018-10-17Merge branch 'sverker/erts/debug_free_null' into maintSverker Eriksson
* sverker/erts/debug_free_null: erts: Fix bug in debug_free for NULL pointer
2018-10-17Merge branch 'igor/tcp-nopush-ERL-698/OTP-15357' into maintJohn Högberg
* igor/tcp-nopush-ERL-698/OTP-15357: "cork" tcp socket around file:sendfile Add nopush TCP socket option
2018-10-16Prepare releaseErlang/OTP
2018-10-16Merge branch 'sverker/erts/ets-select_replace-bug/OTP-15346' into maint-20Erlang/OTP
* sverker/erts/ets-select_replace-bug/OTP-15346: erts: Fix bug in ets:select_replace for bound key
2018-10-15erts: Fix bug in debug_free for NULL pointerSverker Eriksson
causing ASSERT in sys_memset to fail.
2018-10-12Merge branch 'maint-21' into maintRickard Green
* maint-21: Updated OTP version Prepare release erts: Fix UNC path handling on Windows erts: Fix a compiler warning eldap: Fix race at socket close Fix bug for sockopt pktoptions on BSD erts: Fix memory leak on file read errors
2018-10-12Prepare releaseErlang/OTP
2018-10-12Merge branch 'john/erts/fix-unc-paths-windows/OTP-15333/ERL-737' into maint-21Erlang/OTP
* john/erts/fix-unc-paths-windows/OTP-15333/ERL-737: erts: Fix UNC path handling on Windows erts: Fix a compiler warning
2018-10-12Merge branch 'raimo/BSD-sockopt-pktoptions/ERIERL-187/OTP-14297' into maint-21Erlang/OTP
* raimo/BSD-sockopt-pktoptions/ERIERL-187/OTP-14297: Fix bug for sockopt pktoptions on BSD
2018-10-12Merge pull request #1974 from ↵Raimo Niskanen
RaimoNiskanen/raimo/getifaddrs-netns/ERIERL-189/OTP-15121 Implement {netns,NS} option for inet:getifaddrs/1 and friends
2018-10-11"cork" tcp socket around file:sendfileIgor Slepchin
This fixes 200ms delay on the last TCP segment when using file:sendfile/2 on Linux (ERL-698).
2018-10-11Merge branch 'maint-17' into maintRickard Green
* maint-17: Updated OTP version Prepare release
2018-10-11Prepare releaseErlang/OTP
2018-10-11Merge branch 'sverker/r16/binary_to_atom-utf8-crash/ERL-474/OTP-14590' into ↵Erlang/OTP
maint-17 * sverker/r16/binary_to_atom-utf8-crash/ERL-474/OTP-14590: erts: Fix crash in binary_to_atom/term for invalid utf8
2018-10-11Merge branch 'sverker/big-bxor-bug/ERL-450/OTP-14514' into maint-17Erlang/OTP
* sverker/big-bxor-bug/ERL-450/OTP-14514: erts: Fix bug in bxor of a big negative number
2018-10-11Merge branch 'sverker/bin2term-zlib-bug/ERL-340/OTP-14159' into maint-17Erlang/OTP
* sverker/bin2term-zlib-bug/ERL-340/OTP-14159: erts: Fix binary_to_term for compressed and zlib >= v1.2.9
2018-10-11Merge branch 'rickard/thr-prgr-unmanaged-delay-bug/OTP-13869' into maint-17Erlang/OTP
* rickard/thr-prgr-unmanaged-delay-bug/OTP-13869: Fix erts_thr_progress_unmanaged_delay()
2018-10-11Merge branch 'rickard/drv-send-term-thr-bug/OTP-13866' into maint-17Erlang/OTP
* rickard/drv-send-term-thr-bug/OTP-13866: Fix thread calls to erl_drv_send_term()/erl_drv_output_term()
2018-10-11Merge branch 'rickard/port-sig-dropped-fix/OTP-13424' into maint-17Erlang/OTP
* rickard/port-sig-dropped-fix/OTP-13424: Fix implementation of dropped signal to port
2018-10-11erts: Fix UNC path handling on WindowsJohn Högberg
This is unlikely to be the last of the path problems seen after OTP 21, and I'm starting to regret my decision to unconditionally use long paths. The idea to hit all long-path problems all the time was good in theory as it makes such bugs far more visible, but there just aren't enough people who test pre-release versions on Windows, making this the world's slowest game of whack-a-mole.
2018-10-11erts: Fix a compiler warningJohn Högberg
This would've been a bug if the value was used.
2018-10-11Add nopush TCP socket optionIgor Slepchin
This translates to TCP_CORK on Linux and TCP_NOPUSH on BSD. In effect, this acts as super-Nagle: no partial TCP segments are sent out until this option is turned off. Once turned off, all accumulated unsent data is sent out immediately. The latter is *not* the case on OSX, hence the implementation ignores "nopush" on OSX to reduce confusion.
2018-10-09Merge branch 'sverker/erts/ets-select_replace-bug/OTP-15346' into maintSverker Eriksson
* sverker/erts/ets-select_replace-bug/OTP-15346: erts: Fix bug in ets:select_replace for bound key
2018-10-09erts: Fix bug in ets:select_replace for bound keySverker Eriksson
which may cause following calls to ets:next or ets:prev to fail.
2018-10-05Fix run_erl.c so it compiles on SolarisRogier Velting
The checks in place to allow this file to compile on macOS and BSD can be extended to include Solaris.
2018-10-04Merge PR-1962 from gomoripeti/ms_bit_size OTP-15343Sverker Eriksson
Document bit_size in match-specs and allow in fun2ms
2018-10-02Implement {netns,NS} option for inet:getifaddrs/1Raimo Niskanen
Also implement the same option for the legacy undocumented functions inet:getif/1,getiflist/1,ifget/2,ifset/2. The arity 1 functions had before this change got signatures that took a socket port that was used to do the needed syscall, so now the signature was extended to also take an option list with the only supported option {netns,Namespace}. The Socket argument variant remains unsupported. For inet:getifaddrs/1 the documentation file was changed to old style function name definition so be able to hide the Socket argument variant that is visible in the type spec. The arity 2 functions had got an option list as second argument. This list had to be partitioned into one list for the namespace option(s) and the other for the rest. The namespace option list was then fed to the already existing namespace support for socket opening, which places the socket in a namespace and hence made all these functions that in inet_drv.c used getsockopt() work without change. The functions that used getifaddrs() in inet_drv.c had to be changed in inet_drv.c to swap namespaces around the getifaddrs() syscall. This functionality was separated into a new function call_getifaddrs().