Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang
erlang
1871-Improve-traceability.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 1871-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
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor