aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/beam/erl_process.c
diff options
context:
space:
mode:
authorRickard Green <[email protected]>2014-09-05 15:05:29 +0200
committerRickard Green <[email protected]>2014-09-05 15:05:29 +0200
commita19560d72fe0ed5496cc277f8f31903fd8e3b106 (patch)
treea62709aceca7ff65bd4787f171e1d8435f5c90eb /erts/emulator/beam/erl_process.c
parent7455b362c5f85836b2d233be50db85dfe789022e (diff)
parentb3a7e7f84b6e6183113ee961b06d3765de7a48b3 (diff)
downloadotp-a19560d72fe0ed5496cc277f8f31903fd8e3b106.tar.gz
otp-a19560d72fe0ed5496cc277f8f31903fd8e3b106.tar.bz2
otp-a19560d72fe0ed5496cc277f8f31903fd8e3b106.zip
Merge branch 'maint'
* maint: Fix leak of NIF exports Use separate allocation type for NIF export
Diffstat (limited to 'erts/emulator/beam/erl_process.c')
-rw-r--r--erts/emulator/beam/erl_process.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/erts/emulator/beam/erl_process.c b/erts/emulator/beam/erl_process.c
index 685004f267..20a88ec581 100644
--- a/erts/emulator/beam/erl_process.c
+++ b/erts/emulator/beam/erl_process.c
@@ -11872,6 +11872,7 @@ erts_continue_exit_process(Process *p)
struct saved_calls *scb;
process_breakpoint_time_t *pbt;
erts_aint32_t state;
+ void *nif_export;
#ifdef DEBUG
int yield_allowed = 1;
@@ -12022,6 +12023,7 @@ erts_continue_exit_process(Process *p)
: NULL);
scb = ERTS_PROC_SET_SAVED_CALLS_BUF(p, ERTS_PROC_LOCKS_ALL, NULL);
pbt = ERTS_PROC_SET_CALL_TIME(p, ERTS_PROC_LOCKS_ALL, NULL);
+ nif_export = ERTS_PROC_SET_NIF_TRAP_EXPORT(p, ERTS_PROC_LOCKS_ALL, NULL);
erts_smp_proc_unlock(p, ERTS_PROC_LOCKS_ALL);
#ifdef BM_COUNTERS
@@ -12069,6 +12071,9 @@ erts_continue_exit_process(Process *p)
if (pbt)
erts_free(ERTS_ALC_T_BPD, (void *) pbt);
+ if (nif_export)
+ erts_destroy_nif_export(nif_export);
+
delete_process(p);
#ifdef ERTS_SMP