diff options
author | Rickard Green <[email protected]> | 2017-01-23 18:44:39 +0100 |
---|---|---|
committer | Rickard Green <[email protected]> | 2017-02-06 19:54:48 +0100 |
commit | 8d4dd97bcbd0988b08f8f8141ec7cfb17a16aa4a (patch) | |
tree | c81555c716b39d36a219f07a7d0d661979559d56 /erts | |
parent | 5a97997217e5c3f901e8fefbd7bbf6c64652c9a8 (diff) | |
download | otp-8d4dd97bcbd0988b08f8f8141ec7cfb17a16aa4a.tar.gz otp-8d4dd97bcbd0988b08f8f8141ec7cfb17a16aa4a.tar.bz2 otp-8d4dd97bcbd0988b08f8f8141ec7cfb17a16aa4a.zip |
Use magic refs for re:run() static NIFs trap
Diffstat (limited to 'erts')
-rw-r--r-- | erts/emulator/beam/erl_bif_re.c | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/erts/emulator/beam/erl_bif_re.c b/erts/emulator/beam/erl_bif_re.c index ff7746ce1d..ba183f24e8 100644 --- a/erts/emulator/beam/erl_bif_re.c +++ b/erts/emulator/beam/erl_bif_re.c @@ -1319,17 +1319,17 @@ handle_iolist: Binary *mbp = erts_create_magic_binary(sizeof(RestartContext), cleanup_restart_context_bin); RestartContext *restartp = ERTS_MAGIC_BIN_DATA(mbp); - Eterm magic_bin; + Eterm magic_ref; Eterm *hp; memcpy(restartp,&restart,sizeof(RestartContext)); BUMP_ALL_REDS(p); - hp = HAlloc(p, PROC_BIN_SIZE); - magic_bin = erts_mk_magic_binary_term(&hp, &MSO(p), mbp); + hp = HAlloc(p, ERTS_MAGIC_REF_THING_SIZE); + magic_ref = erts_mk_magic_ref(&hp, &MSO(p), mbp); BIF_TRAP3(&re_exec_trap_export, p, arg1, arg2 /* To avoid GC of precompiled code, XXX: not utilized yet */, - magic_bin); + magic_ref); } res = build_exec_return(p, rc, &restart, arg1); @@ -1366,9 +1366,7 @@ static BIF_RETTYPE re_exec_trap(BIF_ALIST_3) Uint loop_limit_tmp; Eterm res; - ASSERT(ERTS_TERM_IS_MAGIC_BINARY(BIF_ARG_3)); - - mbp = ((ProcBin *) binary_val(BIF_ARG_3))->val; + mbp = erts_magic_ref2bin(BIF_ARG_3); ASSERT(ERTS_MAGIC_BIN_DESTRUCTOR(mbp) == cleanup_restart_context_bin); |