aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator
diff options
context:
space:
mode:
authorSverker Eriksson <[email protected]>2017-08-28 20:19:43 +0200
committerSverker Eriksson <[email protected]>2017-08-30 16:26:40 +0200
commit7c5fcd3f2701cbb614930682ac52ff75b9c26e6c (patch)
treed26c1f6f7ca64b9f56ed846f1b761a125100c9cd /erts/emulator
parent11ee8c813ac824015a85d51fb455b31bab6f648c (diff)
downloadotp-7c5fcd3f2701cbb614930682ac52ff75b9c26e6c.tar.gz
otp-7c5fcd3f2701cbb614930682ac52ff75b9c26e6c.tar.bz2
otp-7c5fcd3f2701cbb614930682ac52ff75b9c26e6c.zip
erts: Fix memory leak when sending to terminating port
Error: Leak_DefinitelyLost erts_alloc:230 (-> 0x52E54D) [erl_alloc.h] port_task_alloc:154 (-> 0x52F3CA) [erl_port_task.c] erts_port_task_alloc_p2p_sig_data:212 (-> 0x52F5D3) [erl_port_task.c] erts_port_output:2147 (-> 0x4F6057) [io.c] erts_port_command:4126 (-> 0x4FA10E) [io.c] do_send:2200 (-> 0x4E4C64) [bif.c] erl_send:2494 (-> 0x4E5E09) [bif.c] process_main:1730 (-> 0x43ADA5) [beam_emu.c]
Diffstat (limited to 'erts/emulator')
-rw-r--r--erts/emulator/beam/erl_port_task.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/erts/emulator/beam/erl_port_task.c b/erts/emulator/beam/erl_port_task.c
index 1ab1e47254..4d7a86398a 100644
--- a/erts/emulator/beam/erl_port_task.c
+++ b/erts/emulator/beam/erl_port_task.c
@@ -1474,10 +1474,10 @@ erts_port_task_schedule(Eterm id,
}
#endif
- if (!pp)
- goto fail;
-
if (type != ERTS_PORT_TASK_PROC_SIG) {
+ if (!pp)
+ goto fail;
+
ptp = port_task_alloc();
ptp->type = type;
@@ -1515,6 +1515,9 @@ erts_port_task_schedule(Eterm id,
ptp->u.alive.td.psig.callback = va_arg(argp, ErtsProc2PortSigCallback);
ptp->u.alive.flags |= va_arg(argp, int);
va_end(argp);
+ if (!pp)
+ goto fail;
+
if (!(ptp->u.alive.flags & ERTS_PT_FLG_NOSUSPEND))
set_tmp_handle(ptp, pthp);
else {