Skip to content

Commit affbcc9

Browse files
committed
Allow group_leader() to define shell:whereis()
1 parent ceb9567 commit affbcc9

File tree

1 file changed

+20
-6
lines changed

1 file changed

+20
-6
lines changed

lib/kernel/src/group.erl

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -174,13 +174,27 @@ init(internal, [Shell, Options], State = #state{ dumb = Dumb }) ->
174174

175175
-spec whereis_shell() -> undefined | pid().
176176
whereis_shell() ->
177-
case node(group_leader()) of
177+
GroupLeaderPid = group_leader(),
178+
case node(GroupLeaderPid) of
178179
Node when Node =:= node() ->
179-
case user_drv:whereis_group() of
180-
undefined -> undefined;
181-
GroupPid ->
182-
{dictionary, Dict} = erlang:process_info(GroupPid, dictionary),
183-
proplists:get_value(shell, Dict)
180+
maybe
181+
{dictionary, GroupLeaderDict} ?= erlang:process_info(GroupLeaderPid, dictionary),
182+
{shell, GroupLeaderShellPid} ?= lists:keyfind(shell, 1, GroupLeaderDict),
183+
true ?= is_pid(GroupLeaderShellPid),
184+
GroupLeaderShellPid
185+
else
186+
_ ->
187+
maybe
188+
GroupPid ?= user_drv:whereis_group(),
189+
true ?= is_pid(GroupPid),
190+
{dictionary, GroupDict} ?= erlang:process_info(GroupPid, dictionary),
191+
{shell, GroupShellPid} ?= lists:keyfind(shell, 1, GroupDict),
192+
true ?= is_pid(GroupShellPid),
193+
GroupShellPid
194+
else
195+
_ ->
196+
undefined
197+
end
184198
end;
185199
OtherNode ->
186200
erpc:call(OtherNode, group, whereis_shell, [])

0 commit comments

Comments
 (0)