File 2871-Improve-traceability.patch of Package erlang

From 954e4bac432b5ce81f44ca4b2b8287e6544bb0c0 Mon Sep 17 00:00:00 2001
From: Raimo Niskanen <raimo@erlang.org>
Date: Wed, 12 Oct 2022 17:07:44 +0200
Subject: [PATCH 1/2] Improve traceability

---
 lib/kernel/src/dist_util.erl  |  4 +--
 lib/kernel/src/net_kernel.erl | 54 +++++++++++++++++++++++------------
 2 files changed, 38 insertions(+), 20 deletions(-)

diff --git a/lib/kernel/src/dist_util.erl b/lib/kernel/src/dist_util.erl
index cfda284ad7..f7a9ba4898 100644
--- a/lib/kernel/src/dist_util.erl
+++ b/lib/kernel/src/dist_util.erl
@@ -737,8 +737,8 @@ recv_name(#hs_data{socket = Socket, f_recv = Recv} = HSData) ->
             recv_name_old(HSData, Data);
         {ok, [$N | _] = Data} ->
             recv_name_new(HSData, Data);
-	_ ->
-	    ?shutdown(no_node)
+	Other ->
+	    ?shutdown({no_node, Other})
     end.
 
 %% OTP 25.3:
diff --git a/lib/kernel/src/net_kernel.erl b/lib/kernel/src/net_kernel.erl
index 1dd3631863..79d542b1f5 100644
--- a/lib/kernel/src/net_kernel.erl
+++ b/lib/kernel/src/net_kernel.erl
@@ -1170,7 +1170,6 @@ handle_info({AcceptPid, {wait_pending, Node}}, State) ->
 %% Handle different types of process terminations.
 %%
 handle_info({'EXIT', From, Reason}, State) ->
-    verbose({'EXIT', From, Reason}, 1, State),
     handle_exit(From, Reason, State);
 
 %%
@@ -1284,30 +1283,33 @@ handle_exit(Pid, Reason, State) ->
     catch do_handle_exit(Pid, Reason, State).
 
 do_handle_exit(Pid, Reason, State) ->
-    listen_exit(Pid, State),
-    accept_exit(Pid, State),
+    listen_exit(Pid, Reason, State),
+    accept_exit(Pid, Reason, State),
     conn_own_exit(Pid, Reason, State),
     dist_ctrlr_exit(Pid, Reason, State),
-    pending_own_exit(Pid, State),
-    ticker_exit(Pid, State),
-    restarter_exit(Pid, State),
+    pending_own_exit(Pid, Reason, State),
+    ticker_exit(Pid, Reason, State),
+    restarter_exit(Pid, Reason, State),
+    verbose({'EXIT', Pid, Reason}, 1, State),
     {noreply,State}.
 
-listen_exit(Pid, State) ->
+listen_exit(Pid, Reason, State) ->
     case lists:keymember(Pid, ?LISTEN_ID, State#state.listen) of
 	true ->
+            verbose({listen_exit, Pid, Reason}, 1, State),
 	    error_msg("** Netkernel terminating ... **\n", []),
 	    throw({stop,no_network,State});
 	false ->
 	    false
     end.
 
-accept_exit(Pid, State) ->
+accept_exit(Pid, Reason, State) ->
     Listen = State#state.listen,
     case lists:keysearch(Pid, ?ACCEPT_ID, Listen) of
 	{value, ListenR} ->
 	    ListenS = ListenR#listen.listen,
 	    Mod = ListenR#listen.module,
+            verbose({accept_exit, Pid, Reason, Mod}, 1, State),
 	    AcceptPid = Mod:accept(ListenS),
 	    L = lists:keyreplace(Pid, ?ACCEPT_ID, Listen,
 				 ListenR#listen{accept = AcceptPid}),
@@ -1319,16 +1321,20 @@ accept_exit(Pid, State) ->
 conn_own_exit(Pid, Reason, #state{conn_owners = Owners} = State) ->
     case maps:get(Pid, Owners, undefined) of
         undefined -> false;
-        Node -> throw({noreply, nodedown(Pid, Node, Reason, State)})
+        Node ->
+            verbose({conn_own_exit, Pid, Reason, Node}, 1, State),
+            throw({noreply, nodedown(Pid, Node, Reason, State)})
     end.
 
 dist_ctrlr_exit(Pid, Reason, #state{dist_ctrlrs = DCs} = State) ->
     case maps:get(Pid, DCs, undefined) of
         undefined -> false;
-        Node -> throw({noreply, nodedown(Pid, Node, Reason, State)})
+        Node ->
+            verbose({dist_ctrlr_exit, Pid, Reason, Node}, 1, State),
+            throw({noreply, nodedown(Pid, Node, Reason, State)})
     end.
 
-pending_own_exit(Pid, #state{pend_owners = Pend} = State) ->
+pending_own_exit(Pid, Reason, #state{pend_owners = Pend} = State) ->
     case maps:get(Pid, Pend, undefined) of
         undefined ->
             false;
@@ -1336,31 +1342,43 @@ pending_own_exit(Pid, #state{pend_owners = Pend} = State) ->
 	    State1 = State#state { pend_owners = maps:remove(Pid, Pend)},
 	    case get_conn(Node) of
 		{ok, Conn} when Conn#connection.state =:= up_pending ->
+                    verbose(
+                      {pending_own_exit, Pid, Reason, Node, up_pending},
+                      1, State),
 		    reply_waiting(Node,Conn#connection.waiting, true),
 		    Conn1 = Conn#connection { state = up,
 					      waiting = [],
 					      pending_owner = undefined },
 		    ets:insert(sys_dist, Conn1);
 		_ ->
+                    verbose({pending_own_exit, Pid, Reason, Node}, 1, State),
 		    ok
 	    end,
 	    throw({noreply, State1})
     end.
 
-ticker_exit(Pid, #state{tick = #tick{ticker = Pid, time = T} = Tck} = State) ->
+ticker_exit(
+  Pid, Reason,
+  #state{tick = #tick{ticker = Pid, time = T} = Tck} = State) ->
+    verbose({ticker_exit, Pid, Reason, Tck}, 1, State),
     Tckr = restart_ticker(T),
     throw({noreply, State#state{tick = Tck#tick{ticker = Tckr}}});
-ticker_exit(Pid, #state{tick = #tick_change{ticker = Pid,
-					    time = T} = TckCng} = State) ->
+ticker_exit(
+  Pid, Reason,
+  #state{tick = #tick_change{ticker = Pid, time = T} = TckCng} = State) ->
+    verbose({ticker_exit, Pid, Reason, TckCng}, 1, State),
     Tckr = restart_ticker(T),
-    throw({noreply, State#state{tick = TckCng#tick_change{ticker = Tckr}}});
-ticker_exit(_, _) ->
+    throw({noreply, Reason, State#state{tick = TckCng#tick_change{ticker = Tckr}}});
+ticker_exit(_, _, _) ->
     false.
 
-restarter_exit(Pid, State) ->
+restarter_exit(Pid, Reason, State) ->
     case State#state.supervisor of
         {restart, Pid} ->
-	    error_msg("** Distribution restart failed, net_kernel terminating... **\n", []),
+            verbose({restarter_exit, Pid, Reason}, 1, State),
+	    error_msg(
+              "** Distribution restart failed, net_kernel terminating... **\n",
+              []),
 	    throw({stop, restarter_exit, State});
         _ ->
             false
-- 
2.35.3

openSUSE Build Service is sponsored by