diff options
author | Sverker Eriksson <[email protected]> | 2012-03-09 12:06:34 +0100 |
---|---|---|
committer | Sverker Eriksson <[email protected]> | 2012-03-09 15:04:37 +0100 |
commit | 4513946835523d099a28f933d40a6275a46097aa (patch) | |
tree | edde847f79a7b9509525878d0271b970d9cc0bf9 /erts/emulator/beam/erl_init.c | |
parent | 61ebe50adc2bee5667bc9eef6e560cdb72114509 (diff) | |
parent | 16c60b70936070b0a568473c1d99466479446af2 (diff) | |
download | otp-4513946835523d099a28f933d40a6275a46097aa.tar.gz otp-4513946835523d099a28f933d40a6275a46097aa.tar.bz2 otp-4513946835523d099a28f933d40a6275a46097aa.zip |
Merge branch 'sverk/threadsafe-code-loading'
* 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
Diffstat (limited to 'erts/emulator/beam/erl_init.c')
-rw-r--r-- | erts/emulator/beam/erl_init.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/erts/emulator/beam/erl_init.c b/erts/emulator/beam/erl_init.c index 717315d8bd..4db23a0a18 100644 --- a/erts/emulator/beam/erl_init.c +++ b/erts/emulator/beam/erl_init.c @@ -264,6 +264,7 @@ erl_init(int ncpu) erts_init_trace(); erts_init_binary(); erts_init_bits(); + erts_code_ix_init(); erts_init_fun_table(); init_atom_table(); init_export_table(); @@ -352,7 +353,8 @@ erl_first_process_otp(char* modname, void* code, unsigned size, int argc, char** Eterm env; start_mod = am_atom_put(modname, sys_strlen(modname)); - if (erts_find_function(start_mod, am_start, 2) == NULL) { + if (erts_find_function(start_mod, am_start, 2, + erts_active_code_ix()) == NULL) { erl_exit(5, "No function %s:start/2\n", modname); } @@ -451,7 +453,7 @@ load_preloaded(void) if ((code = sys_preload_begin(&preload_p[i])) == 0) erl_exit(1, "Failed to find preloaded code for module %s\n", name); - res = erts_load_module(NULL, 0, NIL, &module_name, code, length); + res = erts_preload_module(NULL, 0, NIL, &module_name, code, length); sys_preload_end(&preload_p[i]); if (res != NIL) erl_exit(1,"Failed loading preloaded module %s (%T)\n", @@ -1471,6 +1473,8 @@ erl_start(int argc, char **argv) init_shared_memory(boot_argc, boot_argv); load_preloaded(); + erts_end_staging_code_ix(); + erts_commit_staging_code_ix(); erts_initialized = 1; |