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

Report errors when connection processes fail

Loïc Hoguin 11 лет назад
Родитель
Сommit
400b93e44c
1 измененных файлов с 14 добавлено и 2 удалено
  1. 14 2
      src/ranch_conns_sup.erl

+ 14 - 2
src/ranch_conns_sup.erl

@@ -147,11 +147,13 @@ loop(State=#state{parent=Parent, ref=Ref, conn_type=ConnType,
 				CurConns, NbChildren, Sleepers);
 		{'EXIT', Parent, Reason} ->
 			exit(Reason);
-		{'EXIT', Pid, _} when Sleepers =:= [] ->
+		{'EXIT', Pid, Reason} when Sleepers =:= [] ->
+			report_error(Ref, Pid, Reason),
 			erase(Pid),
 			loop(State, CurConns - 1, NbChildren - 1, Sleepers);
 		%% Resume a sleeping acceptor if needed.
-		{'EXIT', Pid, _} ->
+		{'EXIT', Pid, Reason} ->
+			report_error(Ref, Pid, Reason),
 			erase(Pid),
 			[To|Sleepers2] = Sleepers,
 			To ! self(),
@@ -188,3 +190,13 @@ system_terminate(Reason, _, _, _) ->
 
 system_code_change(Misc, _, _, _) ->
 	{ok, Misc}.
+
+%% We use ~999999p here instead of ~w because the latter doesn't
+%% support printable strings.
+report_error(_, _, normal) ->
+	ok;
+report_error(Ref, Pid, Reason) ->
+	error_logger:error_msg(
+		"Ranch listener ~p had connection process ~p "
+		"exit with reason: ~999999p~n",
+		[Ref, Pid, Reason]).