diff options
author | Matthew Sackman <matthew@lshift.net> | 2010-05-05 16:42:37 +0100 |
---|---|---|
committer | Matthew Sackman <matthew@lshift.net> | 2010-05-05 16:42:37 +0100 |
commit | 8be651e13c20b14f823a3eb8ff90237db750c391 (patch) | |
tree | cd2ad1c409a89a67d9b2d13c1991ff1ce5620a19 | |
parent | b13fede8cbcab7290d0f07c813c62c1281c56c5a (diff) | |
download | rabbitmq-server-bug19844.tar.gz |
Cosmeticsbug19844
-rw-r--r-- | src/delegate.erl | 13 | ||||
-rw-r--r-- | src/rabbit_amqqueue.erl | 4 | ||||
-rw-r--r-- | src/rabbit_tests.erl | 3 |
3 files changed, 8 insertions, 12 deletions
diff --git a/src/delegate.erl b/src/delegate.erl index a264d60c..6e5519b8 100644 --- a/src/delegate.erl +++ b/src/delegate.erl @@ -108,7 +108,7 @@ split_delegate_per_node(Pids) -> orddict:new(), Pids)). invoke_per_node([{Node, Pids}], Fun) when Node == node() -> - local_delegate(Pids, Fun); + safe_invoke(Pids, Fun); invoke_per_node(NodePids, Fun) -> lists:append(delegate_per_node(NodePids, Fun, fun internal_call/2)). @@ -118,14 +118,11 @@ invoke_no_result_per_node([{Node, Pids}], Fun) when Node == node() -> %% I don't think it's a problem unless someone misuses this %% function. Making this *actually* async would be painful as we %% can't spawn at this point or we break effect ordering. - local_delegate(Pids, Fun); + safe_invoke(Pids, Fun); invoke_no_result_per_node(NodePids, Fun) -> delegate_per_node(NodePids, Fun, fun internal_cast/2), ok. -local_delegate(Pids, Fun) -> - [safe_invoke(Fun, Pid) || Pid <- Pids]. - delegate_per_node(NodePids, Fun, DelegateFun) -> Self = self(), %% Note that this is unsafe if the Fun requires reentrancy to the @@ -136,7 +133,7 @@ delegate_per_node(NodePids, Fun, DelegateFun) -> {thunk, fun() -> Self ! {result, DelegateFun( - Node, fun() -> local_delegate(Pids, Fun) end)} + Node, fun() -> safe_invoke(Pids, Fun) end)} end}) || {Node, Pids} <- NodePids], [receive {result, Result} -> Result end || _ <- NodePids]. @@ -168,7 +165,9 @@ remote_server(Node) -> server(Hash) -> list_to_atom("delegate_process_" ++ integer_to_list(Hash)). -safe_invoke(Fun, Pid) -> +safe_invoke(Pids, Fun) when is_list(Pids) -> + [safe_invoke(Pid, Fun) || Pid <- Pids]; +safe_invoke(Pid, Fun) when is_pid(Pid) -> try {ok, Fun(Pid), Pid} catch diff --git a/src/rabbit_amqqueue.erl b/src/rabbit_amqqueue.erl index 4a9cf9b4..6eb7237b 100644 --- a/src/rabbit_amqqueue.erl +++ b/src/rabbit_amqqueue.erl @@ -378,8 +378,8 @@ safe_delegate_call_ok(H, F, Pids) -> fun () -> F(Pid) end) end), case Bad of - [] -> ok; - Errors -> {error, Errors} + [] -> ok; + _ -> {error, Bad} end. delegate_call(Pid, Msg, Timeout) -> diff --git a/src/rabbit_tests.erl b/src/rabbit_tests.erl index 5451e7d1..95ea15c5 100644 --- a/src/rabbit_tests.erl +++ b/src/rabbit_tests.erl @@ -908,9 +908,7 @@ test_delegates_sync(SecondaryNode) -> RemoteBadPids = spawn_responders(SecondaryNode, Responder, 2), {GoodRes, []} = delegate:invoke(LocalGoodPids ++ RemoteGoodPids, Sender), - true = lists:all(fun ({_, response}) -> true end, GoodRes), - GoodResPids = [Pid || {Pid, _} <- GoodRes], Good = ordsets:from_list(LocalGoodPids ++ RemoteGoodPids), @@ -925,7 +923,6 @@ test_delegates_sync(SecondaryNode) -> passed. - %--------------------------------------------------------------------- control_action(Command, Args) -> control_action(Command, node(), Args). |