Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:25
erlang
1934-kernel-Make-sure-user-is-registered-when-s...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 1934-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
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