File 2934-kernel-Make-sure-user-is-registered-when-start-retur.patch of Package erlang

From c259e3934792ba795f98556181e74cbb7b961785 Mon Sep 17 00:00:00 2001
From: Lukas Larsson <lukas@erlang.org>
Date: Wed, 11 May 2022 16:07:50 +0200
Subject: [PATCH 14/34] kernel: Make sure `user` is registered when start
 returns

In order to avoid spinning in `user_sup` we start user
during the synchronous phase of `user_drv` startup.

See #4895 for more details
---
 lib/kernel/src/user_drv.erl | 11 +++--------
 lib/kernel/src/user_sup.erl |  4 ++--
 2 files changed, 5 insertions(+), 10 deletions(-)

diff --git a/lib/kernel/src/user_drv.erl b/lib/kernel/src/user_drv.erl
index af72dc51ea..0c316a100e 100644
--- a/lib/kernel/src/user_drv.erl
+++ b/lib/kernel/src/user_drv.erl
@@ -104,10 +104,7 @@ start(Args) when is_map(Args) ->
     case gen_statem:start({local, ?MODULE}, ?MODULE, Args, []) of
         {ok, Pid} -> Pid;
         {error, _Reason} ->
-            spawn(fun() ->
-                          process_flag(trap_exit, true),
-                          user:start()
-                  end)
+            user:start()
     end.
 
 callback_mode() -> state_functions.
@@ -118,13 +115,11 @@ init(Args) ->
         {'EXIT', _Reason} ->
             {stop, normal};
         Port ->
-            {ok, init, {Args, #state{ } },
+            {ok, init, {Args, #state{ user = start_user() } },
              {next_event, internal, Port}}
     end.
 
-init(internal, Port, {Args, State}) ->
-
-    User = start_user(),
+init(internal, Port, {Args, State = #state{ user = User }}) ->
 
     %% Cleanup ancestors so that observer looks nice
     put('$ancestors',[User|get('$ancestors')]),
diff --git a/lib/kernel/src/user_sup.erl b/lib/kernel/src/user_sup.erl
index 6206a8d0ab..038d359564 100644
--- a/lib/kernel/src/user_sup.erl
+++ b/lib/kernel/src/user_sup.erl
@@ -45,7 +45,7 @@ init(Flags) ->
 	nouser ->
 	    ignore;
 	{master, Master} ->
-	    Pid = start_slave(Master),
+	    Pid = start_relay(Master),
 	    {ok, Pid, Pid};
 	{M, F, A} ->
 	    case start_user(M, F, A) of
@@ -56,7 +56,7 @@ init(Flags) ->
 	    end
     end.
 
-start_slave(Master) ->
+start_relay(Master) ->
     case rpc:call(Master, erlang, whereis, [user]) of
 	User when is_pid(User) ->
 	    spawn(?MODULE, relay, [User]);
-- 
2.35.3

openSUSE Build Service is sponsored by