Age | Commit message (Collapse) | Author |
|
|
|
* sverk/threadsafe-code-loading: (59 commits)
erts: Fix assert failure when code_server exits "during" commit
erts: Fix memory leak in code loading
erts: Adapt gdb etp-command for new beam_ranges
erts: Set correct default tracing when loading code
erts: Fix faulty assert in non-smp debug vm
erts: Use correct macro for "yield-return"
erts: Refactor code loading with renaming
erts: Seize code_ix lock when updating trace settings
erts: Switch order between code_ix lock and thread blocking
erts: Fix race bug in finish_after_on_load
erts: Refactor export staging lock
erts: Activate staged code in a thread safe way
erts: Suspend processes waiting for code_ix lock
erts: Fix compiler warning in inet_drv
erts: Fix single threaded fallback in new BIF finish_loading_1
erts: Fix type bug
Break apart erlang:load_module/2 into two separate BIFs
Use magic binaries in erts_prepare_loading() and erts_finish_loading()
erts: Cleanup non-blocking load
erts: Fix memory query for non-blocking module table
...
OTP-9974
|
|
* maint:
Add filter for ssh undefined function calls
|
|
* lukas/system/ssh_undef_function:
Add filter for ssh undefined function calls
|
|
Simplify by removing the support of abort_staging after end_staging.
|
|
All magic binaries returned by prepare_loading/2 was leaking.
prepare_loading/2 left the reference count as 2 of the magic binary
when it should be 1 (only owned by the returned term).
|
|
|
|
|
|
* maint:
Fix implementation with ddrb barriers
|
|
* rickard/barriers/OTP-9922:
Fix implementation with ddrb barriers
|
|
|
|
Default trace (on_load) was lost in commit 64bcf5db63d73fe
when load_module/2 was split.
|
|
"is_blocking" always returns true on non-smp
|
|
|
|
* sverk/hipe-debug-cherries:
hipe,erts: Add DEBUG support with MFA's in stack descriptors
hipe: Fix address_to_mfa in hipe loader
hipe,erts: Debug support for native call trace
erts: Make erts_printf accept internal match states
|
|
|
|
Rename lock_code_ix as seize_code_write_permission. Don't want to call
it a "lock" as it can be held between schedulings and different threads
and is not managed by lock checker.
Rename "activate" staging as "commit" staging. Why not be consistent
and use git terminology all the way.
|
|
We want to avoid the race when trace settings are done in the time gap
while a code stager process is waiting for thread process before
commiting and releasing code_ix lock.
|
|
Make for simpler code when we just can block threads and continue
without having to release code_ix lock and repeat code lookups to
avoid race.
|
|
|
|
Must block system before looking up module
to not race with other "code upgrader".
|
|
Renamed it export_staging_lock and made change it to ordinary mutex.
|
|
Activation of staged code is scheduled for a later moment when
all schedulers have done a full memory barrier. This allow
them to read active code index while executing without any
memory barriers at all.
|
|
This will prevent blocking entrire schedulers in the rare case when
several processes are racing to load/upgrade/delete/purge code.
|
|
|
|
Must "start staging" even when we go single threaded.
|
|
|
|
Introduce two new BIFs, erlang:prepare_loading/2 and
erlang:finish_loading/1, and re-implement erlang:load_module/2 in
Erlang code.
We have two reasons for doing this:
* To facilitate suspending a process if another process
is already doing code loading.
* In the future, we can implement parallel and atomic loading
of several modules. Atomic loading works except for modules with
on_load handlers. Because of that issue, erlang:finish_loading/2
will currently only accept a list with a single magic binary.
|
|
|
|
|
|
|
|
|
|
Report sum from all code index.
|
|
Made on_load-tracing always set after commit on active
code_ix when system is still blocked.
Bug caused cprof_SUITE:on_load to fail.
|
|
|
|
|
|
Move implementation from beam_load into new file code_ix.c and module.c
and make some function inline.
|
|
|
|
|
|
|
|
The is a refactoring in preparation to add a counter in Module struct
for export entry tracing. It is nicer if the two are kept together.
|
|
This will prevent test to fail when switching between opt and debug
emulator.
|
|
|
|
|
|
Staging is a better and more general name as does not necessary need
to involve code loading (can be deletion, tracing, etc).
|
|
Easy fallback solution that goes single threaded if the module to be
purged has a loaded nif lib.
|
|
erlang:purge_module/1 is brutal and causes core dump if old code is
still executing, especially on debug VM.
|
|
|
|
* test trivial non-blocking code loading (smoke test)
|
|
|