diff options
author | Erlang/OTP <otp@erlang.org> | 2021-09-02 12:15:39 +0200 |
---|---|---|
committer | Erlang/OTP <otp@erlang.org> | 2021-09-02 12:15:39 +0200 |
commit | 9154460788fa1c71b4f3ed8ed0cd0fbf0f2458b1 (patch) | |
tree | db73768f66dabec558f2e186ce933d85acec1d87 | |
parent | 776ae455f7f24b3d7e788b87464d1caa1692ea95 (diff) | |
parent | 34d0f7f014e1a3dccd5d1e98a3ccb4348ba037ca (diff) | |
download | erlang-9154460788fa1c71b4f3ed8ed0cd0fbf0f2458b1.tar.gz |
Merge branch 'sverker/net_kernel-hang/GH-4931/OTP-17476' into maint-22
* sverker/net_kernel-hang/GH-4931/OTP-17476:
kernel: Fix hanging net_kernel
-rw-r--r-- | lib/kernel/src/net_kernel.erl | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/lib/kernel/src/net_kernel.erl b/lib/kernel/src/net_kernel.erl index b857000a80..4c8dd1e2b5 100644 --- a/lib/kernel/src/net_kernel.erl +++ b/lib/kernel/src/net_kernel.erl @@ -796,12 +796,17 @@ handle_info({AcceptPid, {accept_pending,MyNode,Node,Address,Type}}, State) -> %% change pending process. %% OldOwner = Conn#connection.owner, - ?debug({net_kernel, remark, old, OldOwner, new, AcceptPid}), - exit(OldOwner, remarked), - receive - {'EXIT', OldOwner, _} -> - true - end, + case maps:is_key(OldOwner, State#state.conn_owners) of + true -> + ?debug({net_kernel, remark, old, OldOwner, new, AcceptPid}), + exit(OldOwner, remarked), + receive + {'EXIT', OldOwner, _} -> + true + end; + false -> + ok % Owner already exited + end, ets:insert(sys_dist, Conn#connection{owner = AcceptPid}), AcceptPid ! {self(),{accept_pending,ok_pending}}, Owners = maps:remove(OldOwner, State#state.conn_owners), |