diff options
author | Erlang/OTP <[email protected]> | 2019-06-17 16:50:21 +0200 |
---|---|---|
committer | Erlang/OTP <[email protected]> | 2019-06-17 16:50:21 +0200 |
commit | 47edf3e160db13bfda6546fe1af07bf11072f857 (patch) | |
tree | ac0b2ac526fb5f2375d55998a9e30cf0b5f8662e /erts/emulator | |
parent | af5759cecc1982a5835dd85d4dbaf3d91f8a7e6e (diff) | |
parent | dfebec217a33b0171cb6586df32436e581740719 (diff) | |
download | otp-47edf3e160db13bfda6546fe1af07bf11072f857.tar.gz otp-47edf3e160db13bfda6546fe1af07bf11072f857.tar.bz2 otp-47edf3e160db13bfda6546fe1af07bf11072f857.zip |
Merge branch 'rickard/dist-exit2/21/OTP-15867' into maint-21
* rickard/dist-exit2/21/OTP-15867:
Don't disconnect on remote exit/2 with old incarnation as recipient
Diffstat (limited to 'erts/emulator')
-rw-r--r-- | erts/emulator/beam/dist.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/erts/emulator/beam/dist.c b/erts/emulator/beam/dist.c index 0633bff3c2..bbe2fc31f3 100644 --- a/erts/emulator/beam/dist.c +++ b/erts/emulator/beam/dist.c @@ -1713,9 +1713,17 @@ 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) + break; /* Old incarnation of this node... */ + } + goto invalid_message; + } erts_proc_sig_send_exit(NULL, from, to, reason, token, 0); break; |