summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniil Fedotov <hairyhum@gmail.com>2018-01-19 16:50:19 +0000
committerDaniil Fedotov <hairyhum@gmail.com>2018-01-24 10:52:26 +0000
commit189a452d61eae952f86ae0c8a03857730d6b7f87 (patch)
treeb4b0eb38b151b3dd5c235c9f1372c5b765fa9853
parentaffb941c94de205c304b8e4ea2dc3270896fe9bc (diff)
downloadrabbitmq-server-git-189a452d61eae952f86ae0c8a03857730d6b7f87.tar.gz
Make sure rabbit_misc:pmap callbacks do not throw.
rabbit_misc:pmap/2 can hang if a callback throws an error. This can cause plugin startup to hang when enabling channel interceptors. Made it log errors and continue. [#153846585]
-rw-r--r--src/rabbit_channel.erl20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/rabbit_channel.erl b/src/rabbit_channel.erl
index c671438ce8..1de367e70c 100644
--- a/src/rabbit_channel.erl
+++ b/src/rabbit_channel.erl
@@ -361,13 +361,29 @@ emit_info(PidList, InfoItems, Ref, AggregatorPid) ->
refresh_config_local() ->
rabbit_misc:upmap(
- fun (C) -> gen_server2:call(C, refresh_config, infinity) end,
+ fun (C) ->
+ try
+ gen_server2:call(C, refresh_config, infinity)
+ catch _:Reason ->
+ rabbit_log:error("Failed to refresh channel config "
+ "for channel ~p. Reason ~p",
+ [C, Reason])
+ end
+ end,
list_local()),
ok.
refresh_interceptors() ->
rabbit_misc:upmap(
- fun (C) -> gen_server2:call(C, refresh_interceptors, ?REFRESH_TIMEOUT) end,
+ fun (C) ->
+ try
+ gen_server2:call(C, refresh_interceptors, ?REFRESH_TIMEOUT)
+ catch _:Reason ->
+ rabbit_log:error("Failed to refresh channel interceptors "
+ "for channel ~p. Reason ~p",
+ [C, Reason])
+ end
+ end,
list_local()),
ok.