diff options
| author | Matthias Radestock <matthias@rabbitmq.com> | 2013-01-06 00:35:11 +0000 |
|---|---|---|
| committer | Matthias Radestock <matthias@rabbitmq.com> | 2013-01-06 00:35:11 +0000 |
| commit | ed83bfbfc488aca848f5e554e33a7af469a0d981 (patch) | |
| tree | 7ec4f9e5e8eaa270b286f9ae495b2a34a378f490 /src/delegate.erl | |
| parent | 6081ccf5a9b438f9dd3d0bd478dc2facb79348e9 (diff) | |
| download | rabbitmq-server-git-ed83bfbfc488aca848f5e554e33a7af469a0d981.tar.gz | |
common-case optimisations for delegate:invoke[_no_result]
Diffstat (limited to 'src/delegate.erl')
| -rw-r--r-- | src/delegate.erl | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/delegate.erl b/src/delegate.erl index 9222c34c42..96b8ba314c 100644 --- a/src/delegate.erl +++ b/src/delegate.erl @@ -62,6 +62,13 @@ invoke(Pid, Fun) when is_pid(Pid) -> erlang:raise(Class, Reason, StackTrace) end; +invoke([], _Fun) -> %% optimisation + {[], []}; +invoke([Pid], Fun) when node(Pid) =:= node() -> %% optimisation + case safe_invoke(Pid, Fun) of + {ok, _, Result} -> {[{Pid, Result}], []}; + {error, _, Error} -> {[], [{Pid, Error}]} + end; invoke(Pids, Fun) when is_list(Pids) -> {LocalPids, Grouped} = group_pids_by_node(Pids), %% The use of multi_call is only safe because the timeout is @@ -90,6 +97,11 @@ invoke_no_result(Pid, Fun) when is_pid(Pid) andalso node(Pid) =:= node() -> invoke_no_result(Pid, Fun) when is_pid(Pid) -> invoke_no_result([Pid], Fun); +invoke_no_result([], _Fun) -> %% optimisation + ok; +invoke_no_result([Pid], Fun) when node(Pid) =:= node() -> %% optimisation + safe_invoke(Pid, Fun), %% must not die + ok; invoke_no_result(Pids, Fun) when is_list(Pids) -> {LocalPids, Grouped} = group_pids_by_node(Pids), case orddict:fetch_keys(Grouped) of |
