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

openSUSE Build Service is sponsored by