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

Fix propagating the stacktrace on errors for OTP 19

Loïc Hoguin 7 лет назад
Родитель
Сommit
1cc877b649
1 измененных файлов с 6 добавлено и 0 удалено
  1. 6 0
      src/cowboy_stream_h.erl

+ 6 - 0
src/cowboy_stream_h.erl

@@ -161,12 +161,18 @@ report_crash(Ref, StreamID, Pid, Reason, Stacktrace) ->
 %% @todo Better spec.
 -spec request_process(_, _, _) -> _.
 request_process(Req, Env, Middlewares) ->
+	OTP = erlang:system_info(otp_release),
 	try
 		execute(Req, Env, Middlewares)
 	catch
 		exit:Reason ->
 			Stacktrace = erlang:get_stacktrace(),
 			erlang:raise(exit, {Reason, Stacktrace}, Stacktrace);
+		%% OTP 19 does not propagate any exception stacktraces,
+		%% we therefore add it for every class of exception.
+		_:Reason when OTP =:= "19" ->
+			Stacktrace = erlang:get_stacktrace(),
+			erlang:raise(exit, {Reason, Stacktrace}, Stacktrace);
 		Class:Reason ->
 			erlang:raise(Class, Reason, erlang:get_stacktrace())
 	end.