aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/beam/global.h
AgeCommit message (Collapse)Author
2018-04-16erts: Keep track of which NIF a scheduler is executingJohn Högberg
This may be of interest in crash dumps and allows the upcoming allocation tagging feature to track allocations on a per-NIF basis. Note that this is only updated when user code calls a NIF; it's not altered when the emulator calls NIFs during code upgrades or tracing.
2018-04-16erts: Always keep a copy of driver names as an atomJohn Högberg
2018-04-13Merge branch 'rickard/process_info/OTP-14966'Rickard Green
* rickard/process_info/OTP-14966: New process_info() implementation using signals
2018-04-12New process_info() implementation using signalsRickard Green
2018-03-28Merge branch 'sverker/driver-taints/OTP-14960'Sverker Eriksson
* sverker/driver-taints/OTP-14960: erts: Include foreign static linked drivers in taints erts: Fix harmless bug in macro IS_DRIVER_VERSION_GE erts: Remove our own NIF modules from "taints" erts: Refactor erts_static_nif_get_nif_init erts: Add dynamic loaded drivers to list of "taints"
2018-03-26erts: Include foreign static linked drivers in taintsSverker Eriksson
That is, driver added with config option --enable-static-drivers.
2018-03-21Implementation of true asynchronous signaling between processesRickard Green
Communication between Erlang processes has conceptually always been performed through asynchronous signaling. The runtime system implementation has however previously preformed most operation synchronously. In a system with only one true thread of execution, this is not problematic (often the opposite). In a system with multiple threads of execution (as current runtime system implementation with SMP support) it becomes problematic. This since it often involves locking of structures when updating them which in turn cause resource contention. Utilizing true asynchronous communication often avoids these resource contention issues. The case that triggered this change was contention on the link lock due to frequent updates of the monitor trees during communication with a frequently used server. The signal order delivery guarantees of the language makes it hard to change the implementation of only some signals to use true asynchronous signaling. Therefore the implementations of (almost) all signals have been changed. Currently the following signals have been implemented as true asynchronous signals: - Message signals - Exit signals - Monitor signals - Demonitor signals - Monitor triggered signals (DOWN, CHANGE, etc) - Link signals - Unlink signals - Group leader signals All of the above already defined as asynchronous signals in the language. The implementation of messages signals was quite asynchronous to begin with, but had quite strict delivery constraints due to the ordering guarantees of signals between a pair of processes. The previously used message queue partitioned into two halves has been replaced by a more general signal queue partitioned into three parts that service all kinds of signals. More details regarding the signal queue can be found in comments in the erl_proc_sig_queue.h file. The monitor and link implementations have also been completely replaced in order to fit the new asynchronous signaling implementation as good as possible. More details regarding the new monitor and link implementations can be found in the erl_monitor_link.h file.
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-09Always use sys_memcpy/cmp/etc instead of plain memcpy/cmp/etcJohn Högberg
2018-02-14Merge branch 'sverker/gc-move-opt'Sverker Eriksson
2018-01-29More ERTS_RESTRICT usageSverker Eriksson
2018-01-24Add missing extern storage class in global.h headerSebastien Merle
2018-01-15Merge branch 'maint'Sverker Eriksson
2018-01-08Remove sender punishmentJohn Högberg
The reduction cost of sending messages is now constant and will no longer scale according to the length of the receiving process' message queue.
2018-01-04erts: Refactor ProcBin creationSverker Eriksson
into utility functions.
2018-01-03Replace the libc environment with a thread-safe emulationJohn Högberg
putenv(3) and friends aren't thread-safe regardless of how you slice it; a global lock around all environment operations (like before) keeps things safe as far as our own operations go, but we have absolutely no control over what libc or a library dragged in by a driver/NIF does -- they're free to call getenv(3) or putenv(3) without honoring our lock. This commit solves this by setting up an "emulated" environment which can't be touched without going through our interfaces. Third-party libraries can still shoot themselves in the foot but benign uses of os:putenv/2 will no longer risk crashing the emulator.
2017-11-24Merge branch 'maint'Björn Gustavsson
* maint: Use base64 encoding in crash dumps Correct parsing of sub binaries Generalize passing of options for decoding
2017-11-21Use base64 encoding in crash dumpsBjörn Gustavsson
This will reduce the size of crash dumps, especially if there are large binaries.
2017-10-20Merge branch 'maint'Björn Gustavsson
* maint: Bump version of crash dumps to 0.4 Verify that binaries of different sizes are dumped correctly Don't dump literal areas that are not referenced at all Dump literals separately to avoid incomplete heap data Implement dumping of maps in crash dumps Buffer writing of crash dumps Conflicts: erts/emulator/beam/erl_alloc.types
2017-10-18Don't dump literal areas that are not referenced at allBjörn Gustavsson
2017-10-12Merge branch 'maint'Rickard Green
* maint: Revert "Merge branch 'rickard/null-char-filenames/ERL-370/OTP-14543' into maint"
2017-10-12Revert "Merge branch 'rickard/null-char-filenames/ERL-370/OTP-14543' into maint"Rickard Green
This reverts commit 0717a2194e863f3a78595184ccc5637697f03353, reversing changes made to 71a40658a0cef8b3e25df3a8e48a72d0563a89bf.
2017-10-02Merge branch 'maint'Rickard Green
* maint: Don't allow null in filenames
2017-10-02erts: Move all I/O polling to a seperate threadLukas Larsson
2017-09-27Don't allow null in filenamesRickard Green
2017-09-15erts: Remove undocumented driver_eventSverker Eriksson
2017-09-11erts: Remove possibility to disable dirty schedulersLukas Larsson
2017-08-31Eliminate three arguments for erts_hibernate()Björn Gustavsson
We don't need to pass x(0), x(1), and x(2) because they can already be found in the register array.
2017-08-23Merge branch 'maint'Rickard Green
* maint: Unicode support for erlang:display_string/1
2017-08-23Merge branch 'rickard/unicode-display_string/OTP-14545' into maintRickard Green
* rickard/unicode-display_string/OTP-14545: Unicode support for erlang:display_string/1
2017-08-23Unicode support for erlang:display_string/1Rickard Green
2017-08-23Merge branch 'maint'Sverker Eriksson
2017-08-23Merge branch 'sverker/halt-unicode-slogan/OTP-14553' into maintSverker Eriksson
* sverker/halt-unicode-slogan/OTP-14553: erts: Allow any unicode string as crash dump slogan erts: Generate crash_dump slogan string as UTF8 erts: Refactor erts_unicode_list_to_buf
2017-07-17erts: Replace usage of all erts_smp prefixes to just ertsLukas Larsson
2017-07-17erts: Cleanup removal of non-smp emulatorsLukas Larsson
2017-07-17erts: Remove ERTS_SMP and USE_THREAD definesLukas Larsson
This refactor was done using the unifdef tool like this: for file in $(find erts/ -name *.[ch]); do unifdef -t -f defile -o $file $file; done where defile contained: #define ERTS_SMP 1 #define USE_THREADS 1 #define DDLL_SMP 1 #define ERTS_HAVE_SMP_EMU 1 #define SMP 1 #define ERL_BITS_REENTRANT 1 #define ERTS_USE_ASYNC_READY_Q 1 #define FDBLOCK 1 #undef ERTS_POLL_NEED_ASYNC_INTERRUPT_SUPPORT #define ERTS_POLL_ASYNC_INTERRUPT_SUPPORT 0 #define ERTS_POLL_USE_WAKEUP_PIPE 1 #define ERTS_POLL_USE_UPDATE_REQUESTS_QUEUE 1 #undef ERTS_HAVE_PLAIN_EMU #undef ERTS_SIGNAL_STATE
2017-07-06Allow toggling lock counting at runtimeJohn Högberg
The implementation is still hidden behind ERTS_ENABLE_LOCK_COUNT, and all categories are still enabled by default, but the actual counting can be toggled at will. OTP-13170
2017-07-06erts: Refactor erts_unicode_list_to_bufSverker Eriksson
to get bytes written when truncated.
2017-05-16Merge pull request #1436 from garazdawi/lukas/erts/remove_unused_functionsLukas Larsson
erts: Remove old unused functions
2017-05-16erts: Remove old unused functionsLukas Larsson
The functions have been found using: https://github.com/caolanm/callcatcher
2017-05-04Update copyright yearRaimo Niskanen
2017-04-25Merge branch 'sverker/refactor'Sverker Eriksson
* sverker/refactor: erts: Introduce struct binary_internals erts: Introduce erts_bin_release erts: Init refc=1 in erts_bin_drv_alloc* erts: Init refc=1 in erts_bin_nrml_alloc erts: Remove deliberate leak of hipe fun entries erts: Remove hipe_bifs:remove_refs_from/1 Refactor hipe specific code to use ErtsCodeInfo erts: Refactor ErtsCodeInfo.native
2017-04-12erts: Introduce struct binary_internalsSverker Eriksson
to replace macro ERTS_INTERNAL_BINARY_FIELDS as header in Binary and friends.
2017-04-11erts: Introduce erts_bin_releaseSverker Eriksson
2017-04-11Merge branch 'rickard/pcre-8.40'Rickard Green
OTP-14331 * rickard/pcre-8.40: Update documentation Update README.pcre_update.md Stack guard for PCRE Adjust for incompatibility between PCRE 8.40 and perl 5.22.1 Generate re replacement and split tests with perl vsn 5.22.1 Fix re_SUITE:pcre_compile_workspace_overflow/1 Skip line with lockout of modifiers in PCRE tests Update tests for PCRE version 8.40 Update PCRE to version 8.40 Conflicts: erts/emulator/beam/beam_debug.c
2017-04-07Stack guard for PCRERickard Green
2017-03-10Update copyright yearRickard Green
2017-02-20Fix ErlNifMonitor handlingSverker Eriksson