diff options
| author | Matthias Radestock <matthias@rabbitmq.com> | 2014-01-29 12:45:07 +0000 |
|---|---|---|
| committer | Matthias Radestock <matthias@rabbitmq.com> | 2014-01-29 12:45:07 +0000 |
| commit | 9b52df5430c042492fea8fe84d97d36293dbccf5 (patch) | |
| tree | f758d5b77e73891026ca31712908e8727781e783 /src | |
| parent | 600efc0174f2ea0e43fc606b5faaed2d7ad55ffd (diff) | |
| download | rabbitmq-server-git-9b52df5430c042492fea8fe84d97d36293dbccf5.tar.gz | |
refactor: lift do_mcall casing to head
Diffstat (limited to 'src')
| -rw-r--r-- | src/gen_server2.erl | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/src/gen_server2.erl b/src/gen_server2.erl index 43231c3141..f0748c2020 100644 --- a/src/gen_server2.erl +++ b/src/gen_server2.erl @@ -422,7 +422,7 @@ mcall(CallSpecs) -> {'DOWN', MRef, _, _, Reason} -> exit(Reason) end. -do_mcall({Dest={global, Name}, Request}, Dict) -> +do_mcall({{global,Name}=Dest, Request}, Dict) -> %% whereis_name is simply an ets lookup, and is precisely what %% global:send/2 does, yet we need a Ref to put in the call to the %% server, so invoking whereis_name makes a lot more sense here. @@ -437,15 +437,12 @@ do_mcall({Dest={global, Name}, Request}, Dict) -> Ref end, dict:store(GRef, Dest, Dict); - -do_mcall({Dest, Request}, Dict) -> - MRef = case Dest of - {Name, Node} when is_atom(Name), is_atom(Node) -> - {_Node, Ref} = start_monitor(Node, Name), - Ref; - _PidOrRegName -> - erlang:monitor(process, Dest) - end, +do_mcall({{Name,Node}=Dest, Request}, Dict) when is_atom(Name), is_atom(Node) -> + {_Node, MRef} = start_monitor(Node, Name), + catch msend(Dest, MRef, Request), + dict:store(MRef, Dest, Dict); +do_mcall({Dest, Request}, Dict) when is_atom(Dest); is_pid(Dest) -> + MRef = erlang:monitor(process, Dest), catch msend(Dest, MRef, Request), dict:store(MRef, Dest, Dict). |
