aboutsummaryrefslogtreecommitdiffstats
path: root/bootstrap/lib/kernel/ebin
AgeCommit message (Collapse)Author
2018-01-08Merge branch 'john/erts/putenv-thread-safety/OTP-14666'John Högberg
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-12-08Update primary bootstrapBjörn Gustavsson
2017-12-04Update primary bootstrapBjörn Gustavsson
2017-11-30Reimplement efile_drv as a dirty NIFJohn Högberg
This improves the latency of file operations as dirty schedulers are a bit more eager to run jobs than async threads, and use a single global queue rather than per-thread queues, eliminating the risk of a job stalling behind a long-running job on the same thread while other async threads sit idle. There's no such thing as a free lunch though; the lowered latency comes at the cost of increased busy-waiting which may have an adverse effect on some applications. This behavior can be tweaked with the +sbwt flag, but unfortunately it affects all types of schedulers and not just dirty ones. We plan to add type-specific flags at a later stage. sendfile has been moved to inet_drv to lessen the effect of a nasty race; the cooperation between inet_drv and efile has never been airtight and the socket dying at the wrong time (Regardless of reason) could result in fd aliasing. Moving it to the inet driver makes it impossible to trigger this by closing the socket in the middle of a sendfile operation, while still allowing it to be aborted -- something that can't be done if it stays in the file driver. The race still occurs if the controlling process dies in the short window between dispatching the sendfile operation and the dup(2) call in the driver, but it's much less likely to happen now. A proper fix is in the works. -- Notable functional differences: * The use_threads option for file:sendfile/5 no longer has any effect. * The file-specific DTrace probes have been removed. The same effect can be achieved with normal tracing together with the nif__entry/nif__return probes to track scheduling. -- OTP-14256
2017-11-20Merge branch 'lukas/stdlib/maps_iterators/OTP-14012'Lukas Larsson
* lukas/stdlib/maps_iterators/OTP-14012: erts: Limit size of first iterator for hashmaps Update primary bootstrap Update preloaded modules erts: Remove erts_internal:maps_to_list/2 stdlib: Make io_lib and io_lib_pretty use maps iterator erts: Implement batching maps:iterator erts: Implement maps path iterator erts: Implement map iterator using a stack stdlib: Introduce maps iterator API Conflicts: bootstrap/lib/stdlib/ebin/io_lib.beam bootstrap/lib/stdlib/ebin/io_lib_pretty.beam erts/emulator/beam/bif.tab erts/preloaded/ebin/erlang.beam erts/preloaded/ebin/erts_internal.beam erts/preloaded/ebin/zlib.beam
2017-10-30Update primary bootstrapBjörn Gustavsson
2017-10-13Update primary bootstrapBjörn Gustavsson
2017-10-02Update primary bootstrapBjörn Gustavsson
2017-09-25Update primary bootstrapBjörn Gustavsson
2017-09-08Merge branch 'maint'Björn Gustavsson
* maint: Update primary bootstrap Eliminate incorrect get_stacktrace/0 warning Conflicts: bootstrap/bin/start.boot bootstrap/bin/start_clean.boot bootstrap/lib/compiler/ebin/beam_utils.beam bootstrap/lib/compiler/ebin/beam_validator.beam bootstrap/lib/compiler/ebin/sys_core_fold.beam bootstrap/lib/kernel/ebin/error_logger.beam bootstrap/lib/kernel/ebin/file_server.beam bootstrap/lib/kernel/ebin/global.beam bootstrap/lib/kernel/ebin/hipe_unified_loader.beam bootstrap/lib/kernel/ebin/kernel.appup bootstrap/lib/kernel/ebin/net_kernel.beam bootstrap/lib/kernel/ebin/user_drv.beam bootstrap/lib/stdlib/ebin/c.beam bootstrap/lib/stdlib/ebin/dets.beam bootstrap/lib/stdlib/ebin/dets_utils.beam bootstrap/lib/stdlib/ebin/edlin.beam bootstrap/lib/stdlib/ebin/erl_lint.beam bootstrap/lib/stdlib/ebin/error_logger_file_h.beam bootstrap/lib/stdlib/ebin/error_logger_tty_h.beam bootstrap/lib/stdlib/ebin/escript.beam bootstrap/lib/stdlib/ebin/ets.beam bootstrap/lib/stdlib/ebin/gen_event.beam bootstrap/lib/stdlib/ebin/gen_fsm.beam bootstrap/lib/stdlib/ebin/gen_server.beam bootstrap/lib/stdlib/ebin/gen_statem.beam bootstrap/lib/stdlib/ebin/otp_internal.beam bootstrap/lib/stdlib/ebin/proc_lib.beam bootstrap/lib/stdlib/ebin/qlc.beam bootstrap/lib/stdlib/ebin/shell.beam bootstrap/lib/stdlib/ebin/slave.beam bootstrap/lib/stdlib/ebin/string.beam bootstrap/lib/stdlib/ebin/supervisor.beam
2017-09-08Update primary bootstrapBjörn Gustavsson
2017-09-01Update primary bootstrapBjörn Gustavsson
2017-08-16Update primary bootstrapBjörn Gustavsson
2017-07-07Update primary bootstrapBjörn Gustavsson
2017-06-14Update primary bootstrapRickard Green
2017-06-12Update primary bootstrapBjörn Gustavsson
2017-05-19Update primary bootstrapHans Bolinder
2017-05-19Update primary bootstrapBjörn Gustavsson
2017-05-04Update primary bootstrapBjörn Gustavsson
2017-04-26Update primary bootstrapBjörn Gustavsson
2017-04-26Update primary bootstrapLukas Larsson
2017-04-20Update primary bootstrapBjörn Gustavsson
2017-03-30Update primary bootstrapBjörn-Egil Dahlberg
2017-03-24Update primary bootstrapBjörn-Egil Dahlberg
2017-02-27Update primary bootstrapBjörn Gustavsson
2017-02-17Update primary bootstrapBjörn Gustavsson
2017-02-06Use magic refs for code loading stateRickard Green
2017-02-01Update primary bootstrapBjörn Gustavsson
2017-01-13Update primary bootstrapBjörn Gustavsson
2016-12-12Update primary bootstrapBjörn Gustavsson
2016-12-02Update primary bootstrapBjörn Gustavsson
2016-11-28Update primary bootstrapBjörn Gustavsson
2016-11-23Update primary bootstrapBjörn Gustavsson
2016-10-14erts: Fix early hipe patch loadingSverker Eriksson
by introducing hipe_bifs:commit_patch_load/1 that creates the HipeModule.
2016-10-14erts: Move new hipe ref and sdesc lists to loader stateSverker Eriksson
2016-10-14Add a loader state for HiPE code loadingMagnus Lång
Just like the BEAM loader state (as returned by erlang:prepare_loading/2), the HiPE loader state is contained in a magic binary. Eventually, we will separate HiPE loading into a prepare and a finalise phase, like the BEAM loader, where the prepare phase will be implemented by hipe_unified_loader and the finalise phase be implemented in C by hipe_load.c and beam_load.c, making prepare side-effect free and finalise atomic. The finalise phase will be exposed through the erlang:finish_loading/1 API, just like the BEAM loader, as this will allow HiPE and BEAM modules to be mixed in the same atomic "commit". The usage of a loader state makes it easier to keep track of all resources allocated during loading, and will not only make it easy to prevent leaks when hipe_unified_loader crashes, but also paves the way for proper, leak-free, unloading of HiPE modules.
2016-10-10erts: Improve hipe load/upgrade/purge machinerySverker Eriksson
A step toward better integration of hipe load and purge Highlights: * code_server no longer needs to call hipe_unified_loader:post_beam_load/1 Instead new internal function hipe_redirect_to_module() is called by loading BIFs to patch native call sites if needed. * hipe_purge_module() is called by erts_internal:purge_module/2 to purge any native code. * struct hipe_mfa_info redesigned and only used for exported functions that are called from or implemented by native code. A list of native call sites (struct hipe_ref) are kept for each hipe_mfa_info. * struct hipe_sdesc used by hipe_find_mfa_from_ra() to build native stack traces.
2016-10-05Merge branch 'maint'Björn Gustavsson
* maint: Update primary bootstrap beam_block: Avoid unsafe inclusion of get_map_elements in blocks
2016-10-05Update primary bootstrapBjörn Gustavsson
2016-09-29Update primary bootstrapBjörn Gustavsson
2016-09-02Update primary bootstrapBjörn Gustavsson
2016-08-19Merge branch 'maint'Sverker Eriksson
2016-08-19Merge branch 'sverker/net_kernel-setopts/OTP-13564' into maintSverker Eriksson
2016-08-15Update bootstrapSverker Eriksson
2016-08-10Update primary bootstrapBjörn Gustavsson
2016-08-05Update primary bootstrapBjörn Gustavsson
2016-07-12Update primary bootstrapBjörn-Egil Dahlberg
2016-06-20Update primary bootstrapHenrik Nord
2016-06-10Update primary bootstrapHans Bolinder