summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexandru Scvortov <alexandru@rabbitmq.com>2011-08-12 13:50:31 +0100
committerAlexandru Scvortov <alexandru@rabbitmq.com>2011-08-12 13:50:31 +0100
commit1230ab5de31e4ea885d4706982bb3c5a5d958916 (patch)
tree6afc7f8897527890976e6c78010f4a16fda11997
parent24870f5b7fe8010ffd49a0b318a8a1750538d655 (diff)
downloadrabbitmq-server-1230ab5de31e4ea885d4706982bb3c5a5d958916.tar.gz
start the writer declaratively
-rw-r--r--src/rabbit_channel_sup.erl35
1 files changed, 19 insertions, 16 deletions
diff --git a/src/rabbit_channel_sup.erl b/src/rabbit_channel_sup.erl
index f31cdd17..a19b6bfd 100644
--- a/src/rabbit_channel_sup.erl
+++ b/src/rabbit_channel_sup.erl
@@ -47,41 +47,44 @@
start_link({tcp, Sock, Channel, FrameMax, ReaderPid, Protocol, User, VHost,
Capabilities, Collector}) ->
- {ok, SupPid} = supervisor2:start_link(?MODULE, []),
- {ok, WriterPid} =
- supervisor2:start_child(
- SupPid,
- {writer, {rabbit_writer, start_link,
- [Sock, Channel, FrameMax, Protocol, ReaderPid]},
- intrinsic, ?MAX_WAIT, worker, [rabbit_writer]}),
- [Limiter] = supervisor2:find_child(SupPid, limiter),
+ {ok, SupPid} = supervisor2:start_link(?MODULE,
+ {tcp, Sock, Channel, FrameMax,
+ ReaderPid, Protocol}),
+ [LimiterPid] = supervisor2:find_child(SupPid, limiter),
+ [WriterPid] = supervisor2:find_child(SupPid, writer),
{ok, ChannelPid} =
supervisor2:start_child(
SupPid,
{channel, {rabbit_channel, start_link,
[Channel, ReaderPid, WriterPid, ReaderPid, Protocol,
User, VHost, Capabilities, Collector,
- rabbit_limiter:make_token(Limiter)]},
+ rabbit_limiter:make_token(LimiterPid)]},
intrinsic, ?MAX_WAIT, worker, [rabbit_channel]}),
{ok, AState} = rabbit_command_assembler:init(Protocol),
{ok, SupPid, {ChannelPid, AState}};
start_link({direct, Channel, ClientChannelPid, ConnPid, Protocol, User, VHost,
Capabilities, Collector}) ->
- {ok, SupPid} = supervisor2:start_link(?MODULE, []),
- [Limiter] = supervisor2:find_child(SupPid, limiter),
+ {ok, SupPid} = supervisor2:start_link(?MODULE, direct),
+ [LimiterPid] = supervisor2:find_child(SupPid, limiter),
{ok, ChannelPid} =
supervisor2:start_child(
SupPid,
{channel, {rabbit_channel, start_link,
[Channel, ClientChannelPid, ClientChannelPid, ConnPid,
Protocol, User, VHost, Capabilities, Collector,
- rabbit_limiter:make_token(Limiter)]},
+ rabbit_limiter:make_token(LimiterPid)]},
intrinsic, ?MAX_WAIT, worker, [rabbit_channel]}),
{ok, SupPid, {ChannelPid, none}}.
%%----------------------------------------------------------------------------
-init([]) ->
- {ok, {{one_for_all, 0, 1},
- [{limiter, {rabbit_limiter, start_link, []},
- transient, ?MAX_WAIT, worker, [rabbit_limiter]}]}}.
+init(Type) ->
+ {ok, {{one_for_all, 0, 1}, child_specs(Type)}}.
+
+child_specs({tcp, Sock, Channel, FrameMax, ReaderPid, Protocol}) ->
+ [{writer, {rabbit_writer, start_link,
+ [Sock, Channel, FrameMax, Protocol, ReaderPid]},
+ intrinsic, ?MAX_WAIT, worker, [rabbit_writer]} | child_specs(direct)];
+child_specs(direct) ->
+ [{limiter, {rabbit_limiter, start_link, []},
+ transient, ?MAX_WAIT, worker, [rabbit_limiter]}].