diff options
author | Erlang/OTP <[email protected]> | 2017-10-05 16:58:16 +0200 |
---|---|---|
committer | Erlang/OTP <[email protected]> | 2017-10-05 16:58:16 +0200 |
commit | 9de1509c5e68c9261f05b8f621998cdcf4b5e19a (patch) | |
tree | 2d088b056dccb6731f21aa304c08279994c52fe7 /erts/emulator/beam | |
parent | 2484c5b486fc0db61d26c1b67b7770776342ce59 (diff) | |
parent | e90609f5e3e08cfcb88baa01189889fad302bbf7 (diff) | |
download | otp-9de1509c5e68c9261f05b8f621998cdcf4b5e19a.tar.gz otp-9de1509c5e68c9261f05b8f621998cdcf4b5e19a.tar.bz2 otp-9de1509c5e68c9261f05b8f621998cdcf4b5e19a.zip |
Merge branch 'sverker/19/on_load-on_load-bug/OTP-14612' into maint-19
* sverker/19/on_load-on_load-bug/OTP-14612:
erts: Fix 'on_load' tracing bug for modules with -on_load
code_SUITE:on_load_trace_on_load
Diffstat (limited to 'erts/emulator/beam')
-rw-r--r-- | erts/emulator/beam/beam_bif_load.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/erts/emulator/beam/beam_bif_load.c b/erts/emulator/beam/beam_bif_load.c index b664532c1c..8fc8613c66 100644 --- a/erts/emulator/beam/beam_bif_load.c +++ b/erts/emulator/beam/beam_bif_load.c @@ -242,7 +242,7 @@ struct m { Binary* code; Eterm module; Module* modp; - Uint exception; + Eterm exception; }; static Eterm staging_epilogue(Process* c_p, int, Eterm res, int, struct m*, int); @@ -263,7 +263,7 @@ exception_list(Process* p, Eterm tag, struct m* mp, Sint exceptions) Eterm res = NIL; while (exceptions > 0) { - if (mp->exception) { + if (is_value(mp->exception)) { res = CONS(hp, mp->module, res); hp += 2; exceptions--; @@ -366,9 +366,9 @@ finish_loading_1(BIF_ALIST_1) exceptions = 0; for (i = 0; i < n; i++) { - p[i].exception = 0; + p[i].exception = THE_NON_VALUE; if (p[i].modp->seen) { - p[i].exception = 1; + p[i].exception = am_duplicated; exceptions++; } p[i].modp->seen = 1; @@ -401,9 +401,9 @@ finish_loading_1(BIF_ALIST_1) exceptions = 0; for (i = 0; i < n; i++) { - p[i].exception = 0; + p[i].exception = THE_NON_VALUE; if (p[i].modp->curr.code_hdr && p[i].modp->old.code_hdr) { - p[i].exception = 1; + p[i].exception = am_not_purged; exceptions++; } } @@ -424,7 +424,7 @@ finish_loading_1(BIF_ALIST_1) retval = erts_finish_loading(p[i].code, BIF_P, 0, &mod); ASSERT(retval == NIL || retval == am_on_load); if (retval == am_on_load) { - p[i].exception = 1; + p[i].exception = am_on_load; exceptions++; } } @@ -456,8 +456,9 @@ staging_epilogue(Process* c_p, int commit, Eterm res, int is_blocking, erts_commit_staging_code_ix(); if (loaded) { int i; - for (i=0; i < nloaded; i++) { - set_default_trace_pattern(loaded[i].module); + for (i=0; i < nloaded; i++) { + if (loaded[i].exception != am_on_load) + set_default_trace_pattern(loaded[i].module); } } } |