File 0895-kernel-Fix-bug-in-net_kernel-stop-for-dynamic-node-n.patch of Package erlang
From 2f9c8292aa5670f088991fab49f6af08eddb7fb2 Mon Sep 17 00:00:00 2001
From: Sverker Eriksson <sverker@erlang.org>
Date: Tue, 18 Jan 2022 12:47:29 +0100
Subject: [PATCH 2/2] kernel: Fix bug in net_kernel:stop() for dynamic node
name
persistent term 'net_kernel' erased by mistake:
erl -sname undefined
1> persistent_term:get(net_kernel).
dynamic_node_name
2> net_kernel:stop().
{error,not_allowed}
3> persistent_term:get(net_kernel, undefined).
undefined
---
lib/kernel/src/net_kernel.erl | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/lib/kernel/src/net_kernel.erl b/lib/kernel/src/net_kernel.erl
index bc2f8a6573..35ac02d9ef 100644
--- a/lib/kernel/src/net_kernel.erl
+++ b/lib/kernel/src/net_kernel.erl
@@ -193,10 +193,6 @@ nodename() -> request(nodename).
-spec stop() -> ok | {error, Reason} when
Reason :: not_allowed | not_found.
stop() ->
- case persistent_term:get(net_kernel, undefined) of
- undefined -> ok;
- _ -> persistent_term:erase(net_kernel)
- end,
erl_distribution:stop().
-type node_info() ::
@@ -729,6 +725,16 @@ code_change(_OldVsn, State, _Extra) ->
%% ------------------------------------------------------------
terminate(Reason, State) ->
+ case State of
+ #state{supervisor = {restart, _}} ->
+ ok;
+ _ ->
+ case persistent_term:get(net_kernel, undefined) of
+ undefined -> ok;
+ _ -> persistent_term:erase(net_kernel)
+ end
+ end,
+
case Reason of
no_network ->
ok;
--
2.34.1