Age | Commit message (Collapse) | Author |
|
The loader of native code tries to avoid race condition by bringing
down the system to a single scheduler. Unfortunately, that will not
completely avoid race conditions beacuse other processes may still
run while the code is being loaded. Therefore, we must still make
sure that native code has been fully fixed up before it can be
executed.
Under unlucky circumstances, it was possible for the global name
register process to call a fun in native code before the native
code for the fun had been fully fixed up. The run-time system
would crash when running the not-fully-fixed-up code.
Here is a way to make the bug 100% reproducible. First add this
function to the 'global' module:
silly_looper(List) ->
lists:foreach(fun(E) -> put(any_atom, E) end, List),
silly_looper(List).
Then insert the following code at the beginning of the init/1
function in the 'global' module:
spawn_link(fun() -> silly_looper(lists:seq(1, 100)) end),
The run-time system will crash during start up when the native
code for the 'global' module is being loaded. What will happen
is that lists:foreach/2 (which runs in native code) will call
the native code for the fun in silly_looper/1 before the reference
to 'any_atom' has been changed from a 0 to the proper tagged
atom value. The put/2 BIF will exit when attempting to calculate
the hash value for the illegal value 0 (it is not properly tagged).
To eliminate this race condition, we must delay patching the
native code addresses for a fun into the fun entry until the native
code has been fully fixed up. We will use the new BIFs introduced
in the previous commit.
While we are at it, we will also make sure that we erase any
temporary variables in the process dictionary used by the
hipe_unified_loader module.
|
|
This commit is a preparation for eliminating a race condition
loading the native code for modules whose BEAM code has already
been loaded. Here we introduce two new BIFs so that looking up
a fun entry is separate from setting the native address in the
fun entry.
|
|
* rickard/xcomp-readme:
Let xcomp/README.md refer to HOWTO/INSTALL-CROSS.md
|
|
* bjorn/erts/fp-exceptions-on-osx:
Disable accidentally enabled floating point exceptions on MacOS X
|
|
|
|
|
|
In c7ddafbe, which disabled floating point exceptions on Linux,
floating point exceptions were accidentally enabled on MacOS X.
|
|
|
|
|
|
* ia/ssl/fix-warnings:
ssl: Fix compiler warnings
ssl: Fix appup regexps and instructions
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* sverk/hipe-disable-gc-bug:
erts: Fix heap overwrite by hipe "trap frames" when GC is disabled
ASSERT that GC is not tried with "need" when GC is disabled
|
|
by trapping BIFs like term_to_binary and binary_to_term.
|
|
* ia/ssl/prepare-for-release:
ssl: Prepare for release
|
|
|
|
* kostis/hipe-tests-bs/OTP-11748:
Up the time limit (globally) for some slow machines
Add check so that tests are skipped if HiPE is not available
Add a Makefile for the HiPE tests
Add tests for the HiPE compiler (Part 1: binaries and bitstrings)
|
|
* hb/syntax_tools/correct_igor_contract:
Correct a contract in the igor module
|
|
Thanks Kostis.
|
|
|
|
* anders/diameter/grouped_decode/OTP-11675:
Be lenient with the M-bit in Grouped AVPs
|
|
|
|
RFC 6733 says this, in 4.4:
Receivers of a Grouped AVP that does not have the 'M' (mandatory) bit
set and one or more of the encapsulated AVPs within the group has the
'M' (mandatory) bit set MAY simply be ignored if the Grouped AVP itself
is unrecognized. The rule applies even if the encapsulated AVP with its
'M' (mandatory) bit set is further encapsulated within other sub-groups,
i.e., other Grouped AVPs embedded within the Grouped AVP.
The first sentence is mangled but take it to mean this:
An unrecognized AVP of type Grouped that does not set the 'M' bit MAY
be ignored even if one of its encapsulated AVPs sets the 'M' bit.
This is a bit of a non-statement since if the AVP is unrecognized then
its type is unknown. We therefore don't know that its data bytes contain
encapsulated AVPs, so can't but ignore any of those that set the M-bit.
Doing anything else when the type *is* known would be inconsistent.
OTP-11087 (commit 066544fa) caused the M-bit on any unrecognized AVP to
be regarded as an error, unrecognized being taken to mean "not
explicitly defined as a member of its container". (That is, an AVP that
can't be packed into a dedicated record field, which is slightly
stronger than "not defined".) This fixed the original intention for
top-level AVPs but broke the required leniency for Grouped AVPs whose
type is known. This commit restores the leniency.
Note that dictionary files need to be recompiled for the commit to have
effect.
Thanks to Rory McKeown for reporting the problem.
|
|
* rickard/otp_version/OTP-11615:
Update OTP version documentation
|
|
|
|
|
|
|
|
* lukas/erts/float_encoding/OTP-11738:
erts: Set default external enc to use new float scheme
|
|
|
|
|
|
|
|
* bjorn/gs/warnings:
gs: Turn compiler warnings into errors
gs: Eliminate a compiler warning
|
|
Create tests for the HiPE native code compiler. This is the first
part of the effort and contains tests that check that the native
code produced by the HiPE compiler for binaries and bitstrings is
OK and behaves similarly to the code produced by the BEAM compiler.
|
|
|
|
* lukas/ose/master/OTP-11334: (71 commits)
erts: Fix unix efile assert
ose: Use -O2 when building
ose: Expand OSE docs
ose: Add dummy ttsl driver
ose: Cleanup cleanup of mutex selection defines
ose: Polish mmap configure checks
ose: Add ose specific x-compile flags
ose: Updating fd_driver and spawn_driver for OSE
ose: Updating event and signal API for OSE
ose: Cleanup of mutex selection defines
win32: Compile erl_log.exe
ose: Remove uneccesary define
ose: Fix ssl configure test for osx
erts: Fix sys_msg_dispatcher assert
ose: Fix broken doc links
ose: Thread priorities configurable from lmconf
ose: Yielding the cpu is done "the OSE" way
ose: Start using ppdata for tse key
ose: Do not use spinlocks on OSE
ose: Fix support for crypto
...
Conflicts:
lib/crypto/c_src/crypto.c
|
|
We don't want to introduce a potential incompatibility in a
deprecated application, so we will fix the warning by removing
the dead code that causes the warning.
|
|
* egil/fix-syntax_tools-doc:
syntax_tools: Fix broken doc links for Maps
|
|
* byaruhaf/add-books/OTP-11754:
Updated Copyright year and recent Erlang books
|
|
* efine/eldap-IPv6-connections/OTP-11753:
Add support for IPv6 connections
|
|
* Vagabond/adt-faster-io_lib_pretty/OTP-11752:
Use lists:keyfind in io_lib_pretty as it is faster
|
|
* tuncer/update-deprecation-message/OTP-11751:
compiler: update 'asm' deprecation message
|
|
* sgolovan/check_if_ftp_path_is_sane/OTP-11750:
lib/inets/src/ftp/ftp.erl: Check the filenames, usernames, passwords etc. for <CR> and <LF> in them and return error if these offending chars are found. See http://erlang.org/pipermail/erlang-bugs/2014-January/003998.html for details. lib/inets/test/ftp_suite_lib.erl: Added checks for <CR><LF> in file and directory names.
|
|
* fenollp/yecc-bad-example-code/OTP-11749:
Replace fixed-length list-nodes by tuple-nodes
|
|
* fenollp/otp-edoc-usage-fixes:
Fix edoc usage errors
OTP-11702
|