Skip to content

Commit adb69e7

Browse files
committed
Updated stacktrace calls.
1 parent 89c37af commit adb69e7

File tree

1 file changed

+26
-18
lines changed

1 file changed

+26
-18
lines changed

src/elli_ws_protocol.erl

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@
3838

3939
-module(elli_ws_protocol).
4040

41+
-include_lib("elli/src/elli_util.hrl").
42+
4143
%% Ignore the deprecation warning for crypto:sha/1.
4244
%% @todo Remove when we support only R16B+.
4345
-compile(nowarn_deprecated_function).
@@ -92,14 +94,16 @@ upgrade(Req, Env, Handler, HandlerOpts) ->
9294
try websocket_upgrade(State, Req) of
9395
{ok, State2, Req2} -> handler_init(State2, Req2, HandlerOpts)
9496
catch
95-
throw:Exc ->
96-
handle_event(Req, Handler, websocket_throw, [Exc, erlang:get_stacktrace()], HandlerOpts),
97+
throw:{ResponseCode, Headers, Body} when is_integer(ResponseCode) ->
98+
{response, ResponseCode, Headers, Body};
99+
?WITH_STACKTRACE(throw, Exc, Stacktrace)
100+
handle_event(Req, Handler, websocket_throw, [Exc, Stacktrace], HandlerOpts),
97101
elli_ws_request_adapter:maybe_reply(400, Req);
98-
error:Error ->
99-
handle_event(Req, Handler, websocket_error, [Error, erlang:get_stacktrace()], HandlerOpts),
102+
?WITH_STACKTRACE(error, Error, Stacktrace)
103+
handle_event(Req, Handler, websocket_error, [Error, Stacktrace], HandlerOpts),
100104
elli_ws_request_adapter:maybe_reply(400, Req);
101-
exit:Exit ->
102-
handle_event(Req, Handler, websocket_exit, [Exit, erlang:get_stacktrace()], HandlerOpts),
105+
?WITH_STACKTRACE(exit, Exit, Stacktrace)
106+
handle_event(Req, Handler, websocket_exit, [Exit, Stacktrace], HandlerOpts),
103107
elli_ws_request_adapter:maybe_reply(400, Req)
104108
end.
105109

@@ -169,14 +173,16 @@ handler_init(State=#state{env=Env, handler=Handler}, Req, HandlerOpts) ->
169173
elli_ws_request_adapter:ensure_response(Req2, 400),
170174
{ok, Req2, [{result, closed}|Env]}
171175
catch
172-
throw:Exc ->
173-
handle_event(Req, Handler, websocket_throw, [Exc, erlang:get_stacktrace()], HandlerOpts),
176+
throw:{ResponseCode, Headers, Body} when is_integer(ResponseCode) ->
177+
{response, ResponseCode, Headers, Body};
178+
?WITH_STACKTRACE(throw, Exc, Stacktrace)
179+
handle_event(Req, Handler, websocket_throw, [Exc, Stacktrace], HandlerOpts),
174180
elli_ws_request_adapter:maybe_reply(400, Req);
175-
error:Error ->
176-
handle_event(Req, Handler, websocket_error, [Error, erlang:get_stacktrace()], HandlerOpts),
181+
?WITH_STACKTRACE(error, Error, Stacktrace)
182+
handle_event(Req, Handler, websocket_error, [Error, Stacktrace], HandlerOpts),
177183
elli_ws_request_adapter:maybe_reply(400, Req);
178-
exit:Exit ->
179-
handle_event(Req, Handler, websocket_exit, [Exit, erlang:get_stacktrace()], HandlerOpts),
184+
?WITH_STACKTRACE(exit, Exit, Stacktrace)
185+
handle_event(Req, Handler, websocket_exit, [Exit, Stacktrace], HandlerOpts),
180186
elli_ws_request_adapter:maybe_reply(400, Req)
181187
end.
182188

@@ -665,12 +671,14 @@ handler_call(State=#state{handler=Handler}, Req, HandlerState,
665671
{shutdown, Req2, HandlerState2} ->
666672
websocket_close(State, Req2, HandlerState2, {normal, shutdown})
667673
catch
668-
throw:Exc ->
669-
handle_event(Req, Handler, websocket_throw, [Exc, erlang:get_stacktrace()], HandlerState);
670-
error:Error ->
671-
handle_event(Req, Handler, websocket_error, [Error, erlang:get_stacktrace()], HandlerState);
672-
exit:Exit ->
673-
handle_event(Req, Handler, websocket_exit, [Exit, erlang:get_stacktrace()], HandlerState)
674+
throw:{ResponseCode, Headers, Body} when is_integer(ResponseCode) ->
675+
{response, ResponseCode, Headers, Body};
676+
?WITH_STACKTRACE(throw, Exc, Stacktrace)
677+
handle_event(Req, Handler, websocket_throw, [Exc, Stacktrace], HandlerState);
678+
?WITH_STACKTRACE(error, Error, Stacktrace)
679+
handle_event(Req, Handler, websocket_error, [Error, Stacktrace], HandlerState);
680+
?WITH_STACKTRACE(exit, Exit, Stacktrace)
681+
handle_event(Req, Handler, websocket_exit, [Exit, Stacktrace], HandlerState)
674682
end.
675683

676684
websocket_opcode(text) -> 1;

0 commit comments

Comments
 (0)