aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSverker Eriksson <[email protected]>2018-01-24 15:01:57 +0100
committerSverker Eriksson <[email protected]>2018-01-24 15:01:57 +0100
commiteb93dfeebdeb48a644a9804e2d4a9d0cb557cbce (patch)
tree75a019bb00a3a04c4318bd77b86d71626352bf29
parentec9af70ef85da3467913ec3adbce15ac122dcb60 (diff)
parent27da13e1e94961e68b049aab4a14a14d69b4ce16 (diff)
downloadotp-eb93dfeebdeb48a644a9804e2d4a9d0cb557cbce.tar.gz
otp-eb93dfeebdeb48a644a9804e2d4a9d0cb557cbce.tar.bz2
otp-eb93dfeebdeb48a644a9804e2d4a9d0cb557cbce.zip
Merge branch 'maint'
-rw-r--r--erts/emulator/beam/beam_load.c2
-rw-r--r--erts/emulator/hipe/hipe_bif0.c3
-rw-r--r--lib/kernel/src/hipe_unified_loader.erl5
3 files changed, 7 insertions, 3 deletions
diff --git a/erts/emulator/beam/beam_load.c b/erts/emulator/beam/beam_load.c
index beaef0951e..e242fe9140 100644
--- a/erts/emulator/beam/beam_load.c
+++ b/erts/emulator/beam/beam_load.c
@@ -6984,6 +6984,8 @@ int erts_commit_hipe_patch_load(Eterm hipe_magic_bin)
hipe_stp->new_hipe_refs = NULL;
hipe_stp->new_hipe_sdesc = NULL;
+ hipe_redirect_to_module(modp);
+
return 1;
}
diff --git a/erts/emulator/hipe/hipe_bif0.c b/erts/emulator/hipe/hipe_bif0.c
index 380031bf13..e477c4cdea 100644
--- a/erts/emulator/hipe/hipe_bif0.c
+++ b/erts/emulator/hipe/hipe_bif0.c
@@ -1771,7 +1771,8 @@ void hipe_redirect_to_module(Module* modp)
struct hipe_mfa_info *p;
struct hipe_ref_head* refh;
- ERTS_LC_ASSERT(erts_thr_progress_is_blocking());
+ ERTS_LC_ASSERT(erts_thr_progress_is_blocking() ||
+ erts_is_multi_scheduling_blocked());
for (p = mod2mfa_get(modp); p; p = p->next_in_mod) {
if (p->new_address) {
diff --git a/lib/kernel/src/hipe_unified_loader.erl b/lib/kernel/src/hipe_unified_loader.erl
index f4c7c277ed..f8199fcf71 100644
--- a/lib/kernel/src/hipe_unified_loader.erl
+++ b/lib/kernel/src/hipe_unified_loader.erl
@@ -236,9 +236,10 @@ load_common(Mod, Bin, Beam, Architecture) ->
lists:foreach(fun({FE, DestAddress}) ->
hipe_bifs:set_native_address_in_fe(FE, DestAddress)
end, erase(closures_to_patch)),
- ok = hipe_bifs:commit_patch_load(LoaderState),
set_beam_call_traps(FunDefs),
- ok;
+ export_funs(FunDefs),
+ ok = hipe_bifs:commit_patch_load(LoaderState),
+ ok;
BeamBinary when is_binary(BeamBinary) ->
%% Find all closures in the code.
[] = erase(closures_to_patch), %Clean up, assertion.