aboutsummaryrefslogtreecommitdiffstats
path: root/src/cowboy_listener_sup.erl
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2011-04-02 20:27:16 +0200
committerLoïc Hoguin <[email protected]>2011-04-02 20:27:16 +0200
commite4da6956fceea1af8e2cdf9fece0e014576ab43c (patch)
treec182e61fd7f7500a40bd5346b582e50afc910431 /src/cowboy_listener_sup.erl
parente6e5b1767fe379c3fb9a9c46f2ec2b05bf485ce8 (diff)
downloadcowboy-e4da6956fceea1af8e2cdf9fece0e014576ab43c.tar.gz
cowboy-e4da6956fceea1af8e2cdf9fece0e014576ab43c.tar.bz2
cowboy-e4da6956fceea1af8e2cdf9fece0e014576ab43c.zip
Anonymize and improve the cowboy supervision tree.
* Cowboy isn't an OTP application anymore; just a supervisor. * All processes started by Cowboy are now anonymous. * All processes related to a listener are now part of its supervision tree.
Diffstat (limited to 'src/cowboy_listener_sup.erl')
-rw-r--r--src/cowboy_listener_sup.erl28
1 files changed, 20 insertions, 8 deletions
diff --git a/src/cowboy_listener_sup.erl b/src/cowboy_listener_sup.erl
index 3c8b3c2..85b17ef 100644
--- a/src/cowboy_listener_sup.erl
+++ b/src/cowboy_listener_sup.erl
@@ -26,8 +26,7 @@
start_link(NbAcceptors, Transport, TransOpts, Protocol, ProtoOpts) ->
case Transport:listen(TransOpts) of
{ok, LSocket} ->
- supervisor:start_link(?MODULE, [LSocket,
- NbAcceptors, Transport, Protocol, ProtoOpts]);
+ start_sup(LSocket, NbAcceptors, Transport, Protocol, ProtoOpts);
{error, Reason} ->
{error, Reason}
end.
@@ -35,9 +34,22 @@ start_link(NbAcceptors, Transport, TransOpts, Protocol, ProtoOpts) ->
%% supervisor.
%% @todo These specs should be improved.
--spec init(list(term())) -> term().
-init([LSocket, NbAcceptors, Transport, Protocol, ProtoOpts]) ->
- Procs = [{{acceptor, self(), N}, {cowboy_acceptor, start_link,
- [LSocket, Transport, Protocol, ProtoOpts]}, permanent,
- brutal_kill, worker, dynamic} || N <- lists:seq(1, NbAcceptors)],
- {ok, {{one_for_one, 10, 10}, Procs}}.
+-spec init([]) -> term().
+init([]) ->
+ {ok, {{one_for_one, 0, 1}, []}}.
+
+%% Internal.
+
+-spec start_sup(NbAcceptors::non_neg_integer(), Transport::module(),
+ TransOpts::term(), Protocol::module(), ProtoOpts::term())
+ -> {ok, Pid::pid()}.
+start_sup(LSocket, NbAcceptors, Transport, Protocol, ProtoOpts) ->
+ {ok, SupPid} = supervisor:start_link(?MODULE, []),
+ {ok, ReqsPid} = supervisor:start_child(SupPid,
+ {cowboy_requests_sup, {cowboy_requests_sup, start_link, []},
+ permanent, 5000, supervisor, [cowboy_requests_sup]}),
+ {ok, _PoolPid} = supervisor:start_child(SupPid,
+ {cowboy_acceptors_sup, {cowboy_acceptors_sup, start_link, [
+ LSocket, NbAcceptors, Transport, Protocol, ProtoOpts, ReqsPid
+ ]}, permanent, 5000, supervisor, [cowboy_acceptors_sup]}),
+ {ok, SupPid}.