diff options
author | Rickard Green <[email protected]> | 2019-06-05 15:51:45 +0200 |
---|---|---|
committer | Rickard Green <[email protected]> | 2019-06-05 15:51:45 +0200 |
commit | 0d498ae5c958eb81737f722ef49d460c205c2d37 (patch) | |
tree | 8d053fb37cc4fa5093a07933c6a4220ddce5979d | |
parent | 36e90ad779bd17bcbeb8174616aabb01d7666bad (diff) | |
download | otp-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.c | 20 | ||||
-rw-r--r-- | erts/vsn.mk | 2 |
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 |