aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRickard Green <[email protected]>2019-06-05 15:51:45 +0200
committerRickard Green <[email protected]>2019-06-05 15:51:45 +0200
commit0d498ae5c958eb81737f722ef49d460c205c2d37 (patch)
tree8d053fb37cc4fa5093a07933c6a4220ddce5979d
parent36e90ad779bd17bcbeb8174616aabb01d7666bad (diff)
downloadotp-erl_1211-bp.tar.gz
otp-erl_1211-bp.tar.bz2
otp-erl_1211-bp.zip
Don't disconnect on remote exit/2 with old incarnation as recipienterl_1211-bp
-rw-r--r--erts/emulator/beam/dist.c20
-rw-r--r--erts/vsn.mk2
2 files changed, 20 insertions, 2 deletions
diff --git a/erts/emulator/beam/dist.c b/erts/emulator/beam/dist.c
index b1cdd0660a..223e6a0948 100644
--- a/erts/emulator/beam/dist.c
+++ b/erts/emulator/beam/dist.c
@@ -1441,7 +1441,25 @@ int erts_net_message(Port *prt,
token = tuple[4];
reason = tuple[5];
}
- if (is_not_pid(from) || is_not_internal_pid(to)) {
+ if (is_not_pid(from)) {
+ goto invalid_message;
+ }
+ if (is_not_internal_pid(to)) {
+ if (is_external_pid(to)) {
+ DistEntry *dep = external_pid_dist_entry(to);
+ if (dep == erts_this_dist_entry) {
+ erts_dsprintf_buf_t *dsbufp = erts_create_logger_dsbuf();
+ erts_dsprintf(dsbufp,
+ "Discarding exit/2 signal with reason "
+ "%.200T from %T (%T) to %T in an old "
+ "incarnation (%d) of this node %T (%d)\n",
+ reason, from, pid_node_name(from), to,
+ external_pid_creation(to), dep->sysname,
+ erts_this_node->creation);
+ erts_send_warning_to_logger_nogl(dsbufp);
+ break;
+ }
+ }
goto invalid_message;
}
rp = erts_pid2proc_opt(NULL, 0, to, rp_locks,
diff --git a/erts/vsn.mk b/erts/vsn.mk
index 0e755ad8c5..18c7fd3675 100644
--- a/erts/vsn.mk
+++ b/erts/vsn.mk
@@ -17,7 +17,7 @@
# %CopyrightEnd%
#
-VSN = 5.8.5.2
+VSN = 5.8.5.2.0.1
SYSTEM_VSN = R14B04
# Port number 4365 in 4.2