summaryrefslogtreecommitdiff
path: root/src/rabbit_connection_helper_sup.erl
diff options
context:
space:
mode:
authorTim Watson <tim@rabbitmq.com>2013-10-09 16:45:39 +0100
committerTim Watson <tim@rabbitmq.com>2013-10-09 16:45:39 +0100
commit43eaf1fd45f55a7cfaf9618bc3622982d03109d5 (patch)
tree7fec2b23453df09f9ffa14ab4a6d13e49a23213a /src/rabbit_connection_helper_sup.erl
parent83fa3336f9e97549907fabb2a59a1ef29ae3cf46 (diff)
downloadrabbitmq-server-43eaf1fd45f55a7cfaf9618bc3622982d03109d5.tar.gz
Defer starting a queue collector until we've received tune-ok
By waiting for the connection to be fully opened, we reduce resource usage for abandoned connections and DoS vectors. The collector is started as a child of the connection_helper_sup, thus avoiding a potential deadlock with the parent supervisor during shutdown.
Diffstat (limited to 'src/rabbit_connection_helper_sup.erl')
-rw-r--r--src/rabbit_connection_helper_sup.erl10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/rabbit_connection_helper_sup.erl b/src/rabbit_connection_helper_sup.erl
index 580aa65f..8f6c7698 100644
--- a/src/rabbit_connection_helper_sup.erl
+++ b/src/rabbit_connection_helper_sup.erl
@@ -19,12 +19,16 @@
-behaviour(supervisor2).
-export([start_link/0]).
+-export([start_queue_collector/1]).
-export([init/1]).
+-include("rabbit.hrl").
+
%%----------------------------------------------------------------------------
-ifdef(use_specs).
-spec(start_link/0 :: () -> rabbit_types:ok_pid_or_error()).
+-spec(start_queue_collector/1 :: (pid()) -> rabbit_types:ok_pid_or_error()).
-endif.
%%----------------------------------------------------------------------------
@@ -32,6 +36,12 @@
start_link() ->
supervisor2:start_link(?MODULE, []).
+start_queue_collector(SupPid) ->
+ supervisor2:start_child(
+ SupPid,
+ {collector, {rabbit_queue_collector, start_link, []},
+ intrinsic, ?MAX_WAIT, worker, [rabbit_queue_collector]}).
+
%%--------------------------------------------------------------------------
init([]) ->