Age | Commit message (Collapse) | Author |
|
|
|
* sverk/poll-lost-wakeup/OTP-12859:
erts: Fix race in poller thread wake up
|
|
* egil/fix-purge-literals/OTP-12821:
erts: Fix garbage collect literals in code purge
|
|
|
|
During code purging and check_process_code, the checking of the binary reference
embedded in the match binary state was omitted for the tracing tests. This would cause
the binary match state to reference deallocated memory.
|
|
|
|
OTP-12704
|
|
|
|
* sverk/large-list_to_integer-bug/OTP-12624:
erts: Fix bug in list_to_integer for very large strings
|
|
* egil/maint/process_dictionary-initial-size/OTP-12535:
erts: Document option 'hpds'
erts: Enable command line argument for initial pd size
|
|
list_to_integer(lists:duplicate(10000000,$0)).
crashed due to overflow when calculating nr heap words.
|
|
* egil/fix-term-cmp/OTP-12623:
erts: Fix comparison of exact terms
|
|
|
|
Use '+hpds size' to set initial process dictionary size for spawned processes.
|
|
Comparison of exact terms could cause faulty term tests.
This was caused by a faulty (too small) internal type.
Symptom:
-1 = erts_internal:cmp_term(2147483648,0). %% wrong
Correct:
1 = erts_internal:cmp_term(2147483648,0).
Reported-by: Jesper Louis Andersen
|
|
otp_SUITE: change filter för diameter
|
|
* erland/revert_time/OTP-12444:
Revert "Use new time API and be back-compatible in ssh"
|
|
* nox/fix-port_info-race:
Fix a race condition when calling port_info/1
OTP-12587
|
|
* nlmills/cleanup:
Remove unused time macros from efile_drv
|
|
* wmalik/minor-fixes:
Fix proc_lib doc
Remove commented out code
Fix make_hash description
|
|
This variable hold the values returned by erlang:port_info/1 and
shouldn't be static.
Reported-by: Heinz Nikolaus Gies
|
|
* rickard/port_control_flags_crash/OTP-12544:
Make access to control_flags safe in non-smp emulator
|
|
* rickard/find_emu_cc/OTP-12388:
Fix missing quotation in LM_FIND_EMU_CC
|
|
This reverts commit af972aaf14a5f53510e692f48f672f7e6805ee6d.
Conflicts:
lib/ssh/test/ssh_basic_SUITE.erl
|
|
* nlmills/docfix:
Correct typo in erlang(3) documentation
|
|
All uses of these macros were removed in
commit c3a615aa2da09bc3a0575e973959f800460a63de.
|
|
* mikpe/hipe-mfait-rwlock:
hipe: change mfa_info_table lock to rwmutex
OTP-12557
|
|
* mikpe/avoid-oversize-bignums:
don't leave a heap hole in erts_bs_get_integer_2
don't create oversize bignums in binary matching
OTP-12556
|
|
* erland/ssh/time/OTP-12444:
Update misleading comment in ssh_basic_SUITE
Update new time API and be back-compatible in ssh
Use new time API and be back-compatible in ssh otp_SUITE: Ignore undefined functions in ssh
|
|
|
|
* leoliu/master:
Two minor fixes
OTP-12545
|
|
|
|
* egil/fix-break-printout/OTP-12537:
erts: Fix erroneous printout in crashdump
|
|
* Fix documentation on $char for unicode
* Remove duplicate declaration for erts_encode_ext_dist_header_size
|
|
The hipe_mfa_info_table lock is currently a mutex, causing
unnecessary contention and serialization of lookups for
apply-like constructs.
- change the lock from a mutex to an rwmutex
- split hipe_get_na_nofail_locked into a "try" path which
only needs a read lock, and a "slow" path which requires
a write lock
- reimplement hipe_get_na_nofail (used by apply ops etc) to
first call the "try" path with a read lock, and if that
fails the "slow" path with a write lock
- reimplement hipe_get_na_nofail_locked (used by maintenance
code) to call the "try" path and then optionally the "slow"
path, but without taking locks since its caller already has
the write lock
- adjust remaining lock ops to take/release full write lock
- use _rwlocked as suffix on functions requiring a write lock
- change hipe_mfa_get_trampoline to call get_locked not put_locked,
allowing it to take a read lock instead of a write lock
- change hipe_find_mfa_from_ra() to only take a read lock
|
|
otp_SUITE: Ignore undefined functions in ssh
|
|
|
|
An extra '}' were printed in remote links.
|
|
|
|
Reset p->htop in the oversize bignum error case to avoid leaving a
hole in the heap, which would crash the debug emulator.
|
|
Bignums are artifically restricted in size. Arithmetic and logical
operations check the sizes of resulting bignums, and turn oversize
results into system_limit exceptions.
However, this check is not performed when bignums are constructed by
binary matching. The consequence is that such matchings can construct
oversize bignums that satisfy is_integer/1 yet don't work. Performing
arithmetic such as Term - 0 fails with a system_limit exception. Worse,
performing a logical operation such as Term band Term results in [].
The latter occurs because the size checking (e.g. in erts_band()) is
a simple ASSERT(is_not_nil(...)) on the result of the bignum operation,
which internally is [] (NIL) in the case of oversize results. However,
ASSERT is a no-op in release builds, so the error goes unnoticed and []
is returned as the result of the band/2.
This patch addresses this by preventing oversize bignums from entering
the VM via binary matching:
- the internal bytes_to_big() procedure is augmented to return NIL for
oversize results, just like big_norm()
- callers of bytes_to_big() are augmented to check for NIL returns and
signal errors in those cases
- erts_bs_get_integer_2() can only fail with badmatch, so that is the
Erlang-level result of oversize bignums from binary matches
- big_SUITE.erl is extended with a test case that fails without this
fix (no error signalled) and passes with it (badmatch occurs)
Credit goes to Nico Kruber for the initial bug report.
|
|
|
|
|
|
* egil/fix-getifaddrs-realloc/OTP-12445:
erts: Fix getifaddrs realloc ptr mismatch
|
|
* egil/fix-child_setup-close/OTP-12446:
erts: Use closefrom() if available when closing fds
erts: Don't close all fds twice in child_setup
|
|
When a buffer was exhausted and subsequently a realloc, we could get
an invalid pointer.
For this to occur we would need to have a realloc to lower adresses.
The symptom would be garbage returned from erlang:port_control(Port, 25, [])
(prim_inet:getifaddrs(Port) resulting in a badarg) or a segmentation fault.
|
|
closefrom() was only used in the vfork() case before, now also
used in the fork() case.
|
|
The commit c2b4eab25c907f453a394d382c04cd04e6c06b49 introduced an error
in which child_setup erroneously tried to close all file descriptors twice.
|
|
|
|
|