diff options
author | Lukas Larsson <[email protected]> | 2016-07-07 15:50:03 +0200 |
---|---|---|
committer | Lukas Larsson <[email protected]> | 2016-07-11 10:11:40 +0200 |
commit | 3b186417f6641a3aa13a46e00712d7dfcb29fc0f (patch) | |
tree | f4bb567f1178c920d3495176695f9a5f6f4a76c0 | |
parent | 53bf2a9593a2f34151016f7d84fad6d213d76ee9 (diff) | |
download | otp-3b186417f6641a3aa13a46e00712d7dfcb29fc0f.tar.gz otp-3b186417f6641a3aa13a46e00712d7dfcb29fc0f.tar.bz2 otp-3b186417f6641a3aa13a46e00712d7dfcb29fc0f.zip |
erts: After a call to a tracer nif, reset htop
This is needed in order for the heap to never contain
any pointers to invalid memory. This is good for performance
and debugging reasons.
-rw-r--r-- | erts/emulator/beam/erl_nif.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/erts/emulator/beam/erl_nif.c b/erts/emulator/beam/erl_nif.c index 23931f0e54..c6127a4967 100644 --- a/erts/emulator/beam/erl_nif.c +++ b/erts/emulator/beam/erl_nif.c @@ -3502,6 +3502,7 @@ Eterm erts_nif_call_function(Process *p, Process *tracee, struct enif_environment_t env; ErlHeapFragment *orig_hf = MBUF(p); ErlOffHeap orig_oh = MSO(p); + Eterm *orig_htop = HEAP_TOP(p); ASSERT(is_internal_pid(p->common.id)); MBUF(p) = NULL; clear_offheap(&MSO(p)); @@ -3523,6 +3524,7 @@ Eterm erts_nif_call_function(Process *p, Process *tracee, /* restore original heap fragment list */ MBUF(p) = orig_hf; MSO(p) = orig_oh; + HEAP_TOP(p) = orig_htop; } else { /* Nif call was done without a process context, so we create a phony one. */ |