aboutsummaryrefslogtreecommitdiffstats
path: root/erts
diff options
context:
space:
mode:
authorSverker Eriksson <sverker@erlang.org>2015-12-11 14:17:57 +0100
committerSverker Eriksson <sverker@erlang.org>2015-12-11 14:17:57 +0100
commitefa7a08d1b16aeb280c87f035a97d31ca6eebba6 (patch)
treefe21f6e31fe560eaf2595cff97bf3e68be570310 /erts
parenta2b28094081f1b185a31b33e3c1bcb377d6761bb (diff)
downloadotp-efa7a08d1b16aeb280c87f035a97d31ca6eebba6.tar.gz
otp-efa7a08d1b16aeb280c87f035a97d31ca6eebba6.tar.bz2
otp-efa7a08d1b16aeb280c87f035a97d31ca6eebba6.zip
erts: Fix faulty cleanup when receiving broken dist msg
Bug introduced in ce8279d6a48d41f9. Thank you valgrind.
Diffstat (limited to 'erts')
-rw-r--r--erts/emulator/beam/dist.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/erts/emulator/beam/dist.c b/erts/emulator/beam/dist.c
index 170690ca89..7be2b77a3b 100644
--- a/erts/emulator/beam/dist.c
+++ b/erts/emulator/beam/dist.c
@@ -1231,11 +1231,11 @@ int erts_net_message(Port *prt,
arg = erts_decode_dist_ext(&factory, &ede);
if (is_non_value(arg)) {
#ifdef ERTS_DIST_MSG_DBG
- erts_fprintf(stderr, "DIST MSG DEBUG: erts_dist_ext_size(CTL) failed:\n");
+ erts_fprintf(stderr, "DIST MSG DEBUG: erts_decode_dist_ext(CTL) failed:\n");
bw(buf, orig_len);
#endif
PURIFY_MSG("data error");
- goto data_error;
+ goto decode_error;
}
ctl_len = t - buf;
@@ -1728,12 +1728,13 @@ int erts_net_message(Port *prt,
erts_dsprintf(dsbufp, "Invalid distribution message: %.200T", arg);
erts_send_error_to_logger_nogl(dsbufp);
}
- data_error:
+decode_error:
PURIFY_MSG("data error");
erts_factory_close(&factory);
if (ctl != ctl_default) {
erts_free(ERTS_ALC_T_DCTRL_BUF, (void *) ctl);
}
+data_error:
UnUseTmpHeapNoproc(DIST_CTL_DEFAULT_SIZE);
erts_deliver_port_exit(prt, dep->cid, am_killed, 0);
ERTS_SMP_CHK_NO_PROC_LOCKS;