Просмотр исходного кода

Retrieve the conns_sup in the acceptor start function

With the resolution of the pid of a conns_sup in acceptors_sup and thus in
the child spec, a crash of a conns_sup and subsequent crash of the associated
acceptor causes restarts of the acceptor to fail.
juhlig 6 лет назад
Родитель
Сommit
aa64151149
2 измененных файлов с 5 добавлено и 4 удалено
  1. 4 3
      src/ranch_acceptor.erl
  2. 1 1
      src/ranch_acceptors_sup.erl

+ 4 - 3
src/ranch_acceptor.erl

@@ -14,12 +14,13 @@
 
 -module(ranch_acceptor).
 
--export([start_link/4]).
+-export([start_link/5]).
 -export([loop/5]).
 
--spec start_link(inet:socket(), module(), module(), pid())
+-spec start_link(ranch:ref(), non_neg_integer(), inet:socket(), module(), module())
 	-> {ok, pid()}.
-start_link(LSocket, Transport, Logger, ConnsSup) ->
+start_link(Ref, AcceptorId, LSocket, Transport, Logger) ->
+	ConnsSup = ranch_server:get_connections_sup(Ref, AcceptorId),
 	MonitorRef = monitor(process, ConnsSup),
 	Pid = spawn_link(?MODULE, loop, [LSocket, Transport, Logger, ConnsSup, MonitorRef]),
 	{ok, Pid}.

+ 1 - 1
src/ranch_acceptors_sup.erl

@@ -43,7 +43,7 @@ init([Ref, NumAcceptors, Transport]) ->
 	ranch_server:set_addr(Ref, Addr),
 	Procs = [
 		{{acceptor, self(), N}, {ranch_acceptor, start_link, [
-			LSocket, Transport, Logger, ranch_server:get_connections_sup(Ref, N)
+			Ref, N, LSocket, Transport, Logger
 		]}, permanent, brutal_kill, worker, []}
 			|| N <- lists:seq(1, NumAcceptors)],
 	{ok, {{one_for_one, 1, 5}, Procs}}.