summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmile Joubert <emile@rabbitmq.com>2011-12-14 14:55:52 +0000
committerEmile Joubert <emile@rabbitmq.com>2011-12-14 14:55:52 +0000
commit7a5e343c3db182bc217aa4c9aaba3e89ad7e636d (patch)
treef5e230d5e66d0967686566b39095a78b97ebfbbf
parentfc1d61f01f9b8a3ccfd2a508b0125c62dfe5ce81 (diff)
downloadrabbitmq-server-bug24628.tar.gz
Updated definition of whereis_namebug24628
-rw-r--r--src/gen_server2.erl18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/gen_server2.erl b/src/gen_server2.erl
index c2215c37..49913d26 100644
--- a/src/gen_server2.erl
+++ b/src/gen_server2.erl
@@ -1079,7 +1079,7 @@ get_proc_name({local, Name}) ->
exit(process_not_registered)
end;
get_proc_name({global, Name}) ->
- case global:whereis_name(Name) of
+ case whereis_name(Name) of
undefined ->
exit(process_not_registered_globally);
Pid when Pid =:= self() ->
@@ -1101,7 +1101,7 @@ get_parent() ->
name_to_pid(Name) ->
case whereis(Name) of
undefined ->
- case global:whereis_name(Name) of
+ case whereis_name(Name) of
undefined ->
exit(could_not_find_registerd_name);
Pid ->
@@ -1111,6 +1111,20 @@ name_to_pid(Name) ->
Pid
end.
+whereis_name(Name) ->
+ case ets:lookup(global_names, Name) of
+ [{_Name, Pid, _Method, _RPid, _Ref}] ->
+ if node(Pid) == node() ->
+ case is_process_alive(Pid) of
+ true -> Pid;
+ false -> undefined
+ end;
+ true ->
+ Pid
+ end;
+ [] -> undefined
+ end.
+
find_prioritisers(GS2State = #gs2_state { mod = Mod }) ->
PrioriCall = function_exported_or_default(
Mod, 'prioritise_call', 3,